再谈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判断用户浏览器是否是XP SP2的IE6
Mar 08 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
深入理解Ajax的get和post请求
Jun 02 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
JsChart组件使用详解
Mar 04 Javascript
Vue项目使用CDN优化首屏加载问题
Apr 01 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
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
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jQuery中is()方法用法实例
2015/01/06 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
js表单登陆验证示例
2016/10/19 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
浅析vue深复制
2018/01/29 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
python 快速排序代码
2009/11/23 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
大学四年学习的自我评价分享
2013/12/09 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
见义勇为事迹材料
2014/12/24 职场文书
简历自我评价模板
2015/03/11 职场文书
植树节新闻稿
2015/07/17 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis