IE图片缓存document.execCommand("BackgroundImageCache",false,true)


Posted in Javascript onMarch 01, 2011

Pixy方法受到IE的cache bug影响会闪烁。其实并没有说清楚这个问题,但其实该bug是有条件的,即IE的cache设置为Every visit to the page,而不是默认的Automatically。基本上,只有开发者才会把cache设置为每次访问检查更新,所以这个bug其实不会影响真正的用户 (根据在winxpsp2的ie6下测试,虽然可能仍然调用了一次网络存取的api,但是并没有发生实际的请求,症状就是鼠标有极短时间的抖动,但是图像 不会闪烁)。此外有人发现了一个未公开的方法来让IE对背景图进行缓存: document.execCommand("BackgroundImageCache",false,true)
用这种方法甚至避免了api调用,貌似是直接缓存在IE内存中。

IE6下设置背景图片是不会被真正cache住的,就算服务器做了cache,如果想cache住只能~~~

做过UI设计和开发的人一定知道,IE(不包括IE7)会经常从服务器端重新载入背景图片,好端端的UI界面在IE(不包括IE7)中就这样被折腾着......

Erik发现了一个简单的解决办法(针对IE7以下的IE有效,其实在IE7中已经修复了这个Bug)

程序代码

document.execCommand("BackgroundImageCache", false, true);

今天阅读Ext的源码时发现Jack Slocum已经考虑到了这一点,在Ext.js中给出了他的实现,在其它Ajax框架中应该还没有这种类似的代码,从这一个细节上就能看出Ext的全面~

程序代码

var isIE = ua.indexOf("msie") > -1, isIE7 = ua.indexOf("msie 7") > -1; 
// remove css image flicker 
if(isIE && !isIE7){ 
try{ 
document.execCommand("BackgroundImageCache", false, true); 
}catch(e){} 
}

今 天阅读幻宇的dreamplayer播放器源码时发现幻宇也针对IE的背景缓存进行了修复,只是他并没考虑到IE7中已经不存在这个现象了,这是 evml.js中的一段相关代码~(顺便嘀咕两句:这家伙,写JS从来不加分号的,以前是这样,现在还是这样,这样的话怎么进行压缩呀,汗~下面的代码按 照我的习惯都已加上分号,哪怕只有两三句而已~)

程序代码

window.isIE=navigator.appName.indexOf("Microsoft")==0; 
if(isIE){ 
document.documentElement.addBehavior("#default#userdata"); 
document.execCommand("BackgroundImageCache",false,true); 
}

A while back a lot of people where covering how to work around the bug that IE always
reloads background images from the server, leading to your UI flickering.
Dean wrote one and lots of others wrote the same thing. Today, I saw this simple workaround
(from a fellow Googler who worked at Microsoft before):

document.execCommand("BackgroundImageCache", false, true)

Much simpler but makes me wonder why this is not the default setting?

/**
* 相关回复
* by Nicholas C. Zakas @2007-02-26
*/
I've actually wondered about this "bug" for a while.
I'm sure somewhere along the line this decision was made for a logical reason…
maybe they didn't anticipate how much background images would be used, or maybe they thought
there was some use case under which it would be desirable not to cache the background image.
I'm generally not big on overriding things that seem to be design decisions (which this seems to be).
I've never really thought this was a "bug"…bugs don't usually have switches that say "turn off bug".

Javascript 相关文章推荐
点击下载链接 弹出页面实现代码
Oct 01 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
jQuery中after()方法用法实例
Dec 25 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
判断“命令按钮”是否被鼠标单击详解
Jul 31 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
收集的10个免费的jQuery相册
Feb 26 #Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 #Javascript
20款超赞的jQuery插件 Web开发人员必备
Feb 26 #Javascript
js对象的比较
Feb 26 #Javascript
基于jquery循环map功能的代码
Feb 26 #Javascript
textarea中的手动换行处理的jquery代码
Feb 26 #Javascript
JS 面向对象之神奇的prototype
Feb 26 #Javascript
You might like
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
js new Date()实例测试
2019/10/31 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
python实现汽车管理系统
2018/11/30 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python代码区分大小写吗
2020/06/17 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
电子信息工程专业推荐信
2014/02/14 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
信用卡工作证明模板
2014/09/14 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL