再谈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 相关文章推荐
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
Dec 08 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
ionic实现可滑动的tab选项卡切换效果
Apr 15 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
jquery插件锦集【推荐】
Dec 16 Javascript
js插件实现图片滑动验证码
Sep 29 Javascript
angular5 子组件监听父组件传入值的变化方法
Sep 30 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
jQuery+ajax实现用户登录验证
Sep 13 jQuery
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 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实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
CentOS安装php v8js教程
2015/02/26 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python使用cookielib库示例分享
2014/03/03 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
教师队伍管理制度
2014/01/14 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
网络宣传方案
2014/03/15 职场文书
小学教师节活动总结
2015/03/20 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
2016大学军训心得体会
2016/01/11 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL