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 相关文章推荐
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
VUEJS实战之利用laypage插件实现分页(3)
Jun 13 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
原生js封装的一些jquery方法(详解)
Sep 20 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
JavaScript实现抖音罗盘时钟
Oct 11 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 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
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php PDO异常处理详解
2016/11/20 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
给Function做的OOP扩展
2009/05/07 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
JS 实现分页打印功能
2018/05/16 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
vue+php实现的微博留言功能示例
2019/03/16 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python PIL图片添加字体的例子
2019/08/22 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
校园歌咏比赛主持词
2014/03/18 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
高中班主任评语
2014/12/30 职场文书
思想品德评语大全
2014/12/31 职场文书
建议书格式
2015/02/04 职场文书
放假通知范文
2015/04/14 职场文书
尼克胡哲观后感
2015/06/08 职场文书
运动会1000米加油稿
2015/07/21 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers