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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
DIY jquery plugin - tabs标签切换实现代码
Dec 11 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
jquery的总体架构分析及实现示例详解
Nov 08 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
Sep 28 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 Javascript
原生JS实现烟花效果
Mar 10 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等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Node.js 8 中的重要新特性
2017/06/28 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Django继承自带user表并重写的例子
2019/11/18 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
单位提档介绍信
2014/01/17 职场文书
三年级科学教学反思
2014/01/29 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
会议营销主持词
2015/07/03 职场文书