再谈IE中Flash控件的自动激活 ObjectWrap


Posted in Javascript onMarch 09, 2007

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。

我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。

网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。

可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。

一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。

ObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。

最新的ObjectWrap 可以从这里下载。

原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。

至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。

最后向ObjectWrap的作者 Karina Steffens 致敬!

Javascript 相关文章推荐
JS 强制设为首页的代码
Jan 31 Javascript
javascript实现焦点滚动图效果 具体方法
Jun 24 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
JS 实现微信扫一扫功能
Sep 14 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
JS面向对象之单选框实现
Jan 17 Javascript
javascript的对话框详解与参数
Mar 08 #Javascript
打开超链需要“确认”对话框的方法
Mar 08 #Javascript
javascript学习随笔(使用window和frame)的技巧
Mar 08 #Javascript
关于使用runtimeStyle属性问题讨论文章
Mar 08 #Javascript
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 #Javascript
在IE模态窗口中自由查看HTML源码的方法
Mar 08 #Javascript
encode脚本和normal脚本混用的问题与解决方法
Mar 08 #Javascript
You might like
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
php继承的一个应用
2011/09/06 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
爱国卫生月实施方案
2014/02/21 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
运动会入场口号
2014/06/07 职场文书
团队拓展活动方案
2014/08/28 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
2016年十一促销广告语
2016/01/28 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
Java版 简易五子棋小游戏
2022/05/04 Java/Android