再谈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代码优化 遍历篇
Nov 01 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
浅谈String.valueOf()方法的使用
Jun 06 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
Sep 05 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 Javascript
原生js实现贪吃蛇游戏
Oct 26 Javascript
JavaScript仿京东轮播图效果
Feb 25 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
ThinkPHP视图查询详解
2014/06/30 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
Vue路由跳转问题记录详解
2017/06/15 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
微信小程序之数据绑定原理解析
2019/08/14 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Python入门篇之函数
2014/10/20 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
职工代表大会主持词
2014/04/01 职场文书
企业法人授权委托书
2014/09/25 职场文书
道德与公民自我评价
2015/03/09 职场文书
2015年度保密工作总结
2015/04/24 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
Python如何配置环境变量详解
2021/05/18 Python
5行Python代码实现一键批量扣图
2021/06/29 Python