再谈IE中Flash控件的自动激活 ObjectWrap

踏雪小呈

踏雪小呈

2016-02-19 10:29

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的再谈IE中Flash控件的自动激活 ObjectWrap,过去的都会过去,迎接崭新的开始,释放更美好的自己。

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个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 致敬!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

再谈IE中Flash控件的自动激活 ObjectWrap

Web开发
再谈IE中Flash控件的自动激活 ObjectWrap

Foxmail如何在IE中激活

电脑网络
Foxmail如何在IE中激活

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

激活 ActiveX 控件

Web开发
激活 ActiveX 控件

IE不出现Flash激活框的小发现的js实现方法

Web开发
IE不出现Flash激活框的小发现的js实现方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何取消IE10中的Flash Player版本更新

浏览器
如何取消IE10中的Flash Player版本更新

VC中自动改变控件位置和大小的对话框类

编程语言 网络编程
VC中自动改变控件位置和大小的对话框类

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

android ListView内数据的动态添加与删除实例代码

android ListView内数据的动态添加与删除实例代码

JS类中定义原型方法的两种实现的区别

JS类中定义原型方法的两种实现的区别
下拉加载更多内容 ↓