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 动态设置已知select的option的value值的代码
Dec 16 Javascript
jQuery LigerUI 使用教程入门篇
Jan 18 Javascript
JS中window.open全屏命令解析及使用示例
Dec 11 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
Apr 29 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
html5 canvas 详细使用教程
Jan 20 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
详解webpack2异步加载套路
Sep 14 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
javascript运行机制之执行顺序理解
Aug 03 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
smarty中js的调用方法示例
2014/10/27 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
js word表格动态添加代码
2010/06/07 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Python中设置变量访问权限的方法
2015/04/27 Python
Python中logging实例讲解
2019/01/17 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
大一自我鉴定范文
2013/10/04 职场文书
养殖项目策划书范文
2014/01/13 职场文书
个人综合鉴定材料
2014/05/23 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android
spring boot实现文件上传
2022/08/14 Java/Android