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 相关文章推荐
基于jQuery架构javascript基础体系
Jan 01 Javascript
javascript 全选与全取消功能的实现代码
Dec 23 Javascript
JavaScript Date对象详解
Mar 01 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
EasyUI创建人员树的实例代码
Sep 15 Javascript
vue嵌套路由与404重定向实现方法分析
May 04 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 Javascript
Echarts地图添加引导线效果(labelLine)
Sep 30 Javascript
详解vue或uni-app的跨域问题解决方案
Feb 21 Javascript
vue2.0实现列表数据增加和删除
Jun 17 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
PHP安全编程之加密功能
2006/10/09 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
JS原型链怎么理解
2016/06/27 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
Python实现SQL注入检测插件实例代码
2019/02/02 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
公司门卫管理制度
2014/02/01 职场文书
医学生求职自荐书
2014/06/12 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
《1942》观后感
2015/06/08 职场文书
培根随笔读书笔记
2015/07/01 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python