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 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
使用JavaScript动态设置样式实现代码(2)
Jan 25 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
May 21 Javascript
jQuery的deferred对象使用详解
Sep 25 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 Javascript
收集的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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
python 调用c语言函数的方法
2017/09/29 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python 修改列表中的元素方法
2018/06/26 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
python实现字符串和字典的转换
2018/09/29 Python
Python 多维List创建的问题小结
2019/01/18 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
成人毕业生自我鉴定
2013/10/18 职场文书
公司市场部岗位职责
2013/12/02 职场文书
农村党支部先进事迹
2014/01/14 职场文书
网络编辑职责
2014/03/01 职场文书
新学期开学演讲稿
2014/05/24 职场文书
公司会议开幕词
2015/01/29 职场文书
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript