再谈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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
Ext grid 添加右击菜单
Nov 26 Javascript
javascript加号&quot;+&quot;的二义性说明
Mar 04 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
详解Vue 换肤方案验证
Aug 28 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
简单了解JavaScript arguement原理及作用
May 28 Javascript
vue组件添加事件@click.native操作
Oct 30 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
ADODB的数据库封包程序库
2006/12/31 PHP
php生成xml简单实例代码
2009/12/16 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
javascript如何实现create方法
2019/11/04 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python生成ppt的方法
2018/06/07 Python
Python递归函数实例讲解
2019/02/27 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
python实现翻译word表格小程序
2020/02/27 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
客房领班岗位职责
2015/02/11 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
golang slice元素去重操作
2021/04/30 Golang