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

2016-02-19 10:29 1 1 收藏

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

【 tulaoshi.com - Web开发 】

我在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,如获至宝。

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

ObjectSwap提供的实现只需要在head中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次object标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。

最新的ObjectWrap 可以从这里下载。

原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是object,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。

至于为什么重写object可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。

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

最后向ObjectWrap的作者 Karina Steffens 致敬!

来源:https://www.tulaoshi.com/n/20160219/1594833.html

延伸阅读
function cdtInit( var CardWidth, CardHeight: TCoordinate): Bool; {$ifdef?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> Win32} stdcall ; {$ENDIF Win32} function cdtDraw(aDC: HDC; X, Y: TCoordinate; Card: TCardId;   Mode: Cardinal; Color: TColorRef): Bool; {$...
标签: Web开发
在页面最下面放上如下的代码就可以了  代码如下: script function flashrun() {     var d=document.getElementsByTagName("object")     for(x=0;xd.length;x++)     {         var a=String(d[x].classid...
using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.Collections.Specialized; namespace MyWebControls { /// /// 创建一个派生于WEBCONTROL的类 /// 实现一个公有构造函数,它将调用基类构造函数来指定服务器控件应该输出一个input元素 /// 重写AddAttributesToRender...
标签: 浏览器
如何在IE浏览器中调用未签名ActiveX控件的设置方法?   ActiveX控件做为IE浏览器专门一种插件程序,在我们使用IE过程中是会经常遇到的。比如当我们使用网银或支付宝等安全要求比较高的网站,都会提示我们需要安装ActiveX控件。 只有安装ActiveX控件以后我们才能正常登陆这些网站,以及使用这些网站的服务。一般我们安装的ActiveX...
标签: 浏览器
Flash在Modern IE10中无法打开的解决方案 在Windows 8系统中,微软将IE分成了桌面和modern两个版本。而modern版本对flash只支持白名单中的网站,对于那些不存在白名单中的网站就不能显示其flash。当你使用modern IE 10打开不在白名单含有flash内容的网站时,就会看到对应的提示,这样你不得不转到桌面版的IE 10去查看flash内容。该限制...

经验教程

224

收藏

99
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部