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实现商品拖动选择效果代码(自写)
May 28 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
Aug 03 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
利用jquery实现下拉框的禁用与启用
Dec 07 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
Jan 13 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
JavaScript多种图形实现代码实例
Jun 28 Javascript
浅谈es6中的元编程
Dec 01 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
thinkphp缓存技术详解
2014/12/09 PHP
Use Word to Search for Files
2007/06/15 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
JSON 数据格式详解
2017/09/13 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python 如何区分return和yield
2020/09/22 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
酒店优秀员工事迹材料
2014/06/02 职场文书
大学生个人求职信
2014/06/02 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
毕业设计论文评语
2014/12/31 职场文书
学雷锋活动简报
2015/07/20 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL