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 获取字符串字节数的多种方法
Jun 02 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
Sep 15 Javascript
html超链接打开窗口大小的方法
Mar 05 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
跟我学习javascript的循环
Nov 18 Javascript
javascript笔记之匿名函数和闭包
Feb 06 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
Jul 21 Javascript
浅谈Node Inspector 代理实现
Oct 19 Javascript
JavaScript框架Angular和React深度对比
Nov 20 Javascript
vue中的面包屑导航组件实例代码
Jul 01 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 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 截取字符串专题集合
2010/08/19 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
调试Python程序代码的几种方法总结
2015/04/28 Python
python实现Flappy Bird源码
2018/12/24 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
static关键字的用法
2013/10/07 面试题
员工自我鉴定范文
2013/10/06 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
质量承诺书怎么写
2014/05/24 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
体育活动总结
2015/02/04 职场文书
小孩不笨观后感
2015/06/03 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
Python日志模块logging用法
2022/06/05 Python