再谈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 相关文章推荐
JavaScript自定义事件介绍
Aug 29 Javascript
jquery获取当前点击对象的value方法
Feb 28 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
详解node单线程实现高并发原理与node异步I/O
Sep 21 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
浅析TypeScript 命名空间
Mar 19 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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
Laravel定时任务的每秒执行代码
2019/10/22 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python之str操作方法(详解)
2017/06/19 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
对python函数签名的方法详解
2019/01/22 Python
详解python和matlab的优势与区别
2019/06/28 Python
解析Python3中的Import
2019/10/13 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
C语言50道问题
2014/10/23 面试题
个人自我评价范文
2014/02/05 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014年环保局工作总结
2014/12/11 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
python状态机transitions库详解
2021/06/02 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫