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 相关文章推荐
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
深入分析js的冒泡事件
Dec 05 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
浅谈javascript的url参数parse和build函数
Mar 04 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
vue 挂载路由到头部导航的方法
Nov 13 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
JS数组方法join()用法实例分析
Jan 18 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
May 06 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
递归列出所有文件和目录
2006/10/09 PHP
PHP 函数学习简单小结
2010/07/08 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
jquery选择器使用详解
2014/04/08 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python WSGI的深入理解
2018/08/01 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
前台文员岗位职责
2013/12/28 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
公司承诺书格式范文
2015/04/28 职场文书
好人好事新闻稿
2015/07/17 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android