IE中Flash控件的自动激活

我目前使用的解决方案(感觉是最省事儿的,不过只在我的ie上测试通过,有待更多考证!):

建立一个flash.js文件 拷贝如下代码

function InsertFlash(Flash,Width,Height,ID){
document.write("<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" ");
document.write("codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0\" ");
document.write("width=\"" + Width + "\" height=\"" + Height + "\" id=\"" + ID + "\">");
document.write("<param name=\"movie\" value=\"" + Flash + "\">");
document.write("<param name=\"quality\" value=\"high\">");
document.write("<param name=\"wmode\" value=\"transparent\">");
document.write("<embed src=\"" + Flash + "\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" ");
document.write("type=\"application/x-shockwave-flash\" width=\"" + Width + "\" height=\"" + Height + "\"></embed>");
document.write("</object>");
}

 

======================================

页面中写入的代码为:
先调用本js程序
<script type="text/javascript" src="flash.js"></script>
//需要放置flash的地方插入(需要注意,insertflash最后一个属性是ID,在同一个页面中必须是唯一的,在本解决方案中他是无关紧要的,建议保留。):

<script type="text/javascript">

InsertFlash("images/top.swf",500,150,"top");

</script>





参考资料:http://hi.baidu.com/xs86/blog/item/bc1efab4f5fb9e738bd4b218.html  感谢原文作者!2007-01-31 10:48

我在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。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。

posted @ 2007-11-02 09:58  zhangsir  阅读(451)  评论(0编辑  收藏  举报