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 相关文章推荐
破除一些网站复制、右键限制
Nov 04 Javascript
javascript数据结构与算法之检索算法
Apr 04 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
分享两段简单的JS代码防止SQL注入
Apr 12 Javascript
js实现仿购物车加减效果
Mar 01 Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
Sep 25 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
原生js实现Flappy Bird小游戏
Dec 24 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 Javascript
jQuery实现电梯导航模块
Dec 22 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
在项目中寻找代码的坏命名
2012/07/14 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
详解Django框架中的视图级缓存
2015/07/23 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
农民工工资承诺书范文
2014/03/31 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
感恩节活动策划方案
2014/05/16 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
基层工作经历证明
2015/06/19 职场文书
小学教育见习总结
2015/06/23 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python