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 相关文章推荐
js实现禁止中文输入的方法
Jan 14 Javascript
asp.net+js实现金额格式化
Feb 27 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
JavaScript简单拖拽效果(1)
May 17 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
Jun 15 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
Vue2.0 http请求以及loading展示实例
Mar 06 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
深入理解Vue的数据响应式
May 15 Vue.js
深入浅析React中diff算法
May 19 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调用.NET的WebService 简单实例
2015/03/27 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
jsonp原理及使用
2013/10/28 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
python求pi的方法
2014/10/08 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
语文课外活动总结
2014/08/27 职场文书
邀请书模板
2015/02/02 职场文书
教师党员个人自我评价
2015/03/04 职场文书
交通事故调解协议书
2015/05/20 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript