再谈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使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
Chrome调试折腾记之JS断点调试技巧
Sep 11 Javascript
判断滚动条滑到底部触发事件(实例讲解)
Nov 15 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
微信小程序用canvas画图并分享
Mar 09 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
Vue中使用import进行路由懒加载的原理分析
Apr 01 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
总结对比php中的多种序列化
2016/08/28 PHP
JavaScript 调试器简介
2009/02/21 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
从vue源码看props的用法
2019/01/09 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
JS FormData对象使用方法实例详解
2020/02/12 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
django框架创建应用操作示例
2019/09/26 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
结束运行python的方法
2020/06/16 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
自荐信范文
2013/12/10 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
三严三实心得体会范文
2014/10/13 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
升学宴学生致辞
2015/07/27 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js