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(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
javascript时间差插件分享
Jul 18 Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
Jun 19 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
webuploader实现上传图片到服务器功能
Aug 16 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 判断变量类型实现代码
2009/10/23 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
深入理解Python中的*重复运算符
2017/10/28 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
医务工作者先进事迹材料
2014/01/26 职场文书
应届生求职自荐信
2014/07/04 职场文书
婚礼家长致辞
2015/07/27 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript