再谈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 13 Javascript
Javascript 圆角div的实现代码
Oct 15 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
对比分析json及XML
Nov 28 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
JS实现双击编辑可修改状态的方法
Aug 14 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
JS实现简单日历特效
Jan 03 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字符串截取问题
2006/11/28 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python sys.argv用法实例
2015/05/28 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
python中正则表达式的使用方法
2018/02/25 Python
实践Vim配置python开发环境
2018/07/02 Python
Django实现文件上传和下载功能
2019/10/06 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
Pygame的程序开始示例代码
2020/05/07 Python
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
医院领导班子四风对照检查材料
2014/09/27 职场文书
党员个人承诺书
2015/04/27 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
JS实现扫雷项目总结
2021/05/19 Javascript
anaconda python3.8安装后降级
2021/06/11 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python