注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

热血易冷

宝剑锋从磨砺出,梅花香自苦寒来。

 
 
 

日志

 
 

SwfObject解决Html与Flash传递参数问题  

2011-03-28 14:29:41|  分类: 记事本_flash网站 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SwfObject解决Html与Flash之间传递参数问题 
在彻底摒弃Adobe的激活ActiveX控件的方法一文中已经详细分析了使用Adobe提供的AC_RunActiveContent.js导致HTML与Flash之间不能传递参数的问题。经过Adobe论坛里GWD的提示,我转而寻求SwfObject的帮助。发现SwfObject是一个很好的解决方案。 

SwfObject英文介绍:http://blog.deconcept.com/swfobject/ 
SwfObject中文翻译:http://www.awflasher.com/flash/articles/swfobj.htm 
源文件:SWFObject 1.5 

关于SwfObject的介绍上面两篇文章已经讲的很详细了。我这里只列一段标准的应用和一些上面两篇文章没有提到的问题. 

Html中的JS代码 
<script type="text/javascript" src="swfobject.js"></script> 
<script type="text/javascript"> 
// <![CDATA[ 
var so = new SWFObject("asCallJs.swf", "MyDemo", "500", "400", "9", "#FF6600"); 
so.addVariable("param1", "Parameter1"); // this line is optional, but this example uses the variable and displays this text inside the flash movie 
so.addVariable("param2", "Parameter2"); 
so.useExpressInstall('expressinstall.swf'); 
so.write("flashcontent"); 
// ]]> 
</script><!--被AS调用的JS函数--> 
<script language="Javascript"> 
// <![CDATA[ 
// adds two numbers, and sends the result back to ActionScript 
function addNumbers(num1, num2) 
result=num1 + num2; 
alert("3+7=" + result); 
return (result); 
// ]]> 
</script> Read the rest of this entry ? 


彻底摒弃Adobe的激活ActiveX控件的方法 
大家知道,在IE中只有激活了 ActiveX控件,Flash才能够与浏览者交互,否则得手动点一下激活。Flash也提供了一个很“方便”的解决方案,就是在发布swf文件的同时,发布html文件即可。这样Flash会在生成一个swf文件,一个包含swf的Html文件,和一个“AC_RunActiveContent.js” 文件。Html文件通过调用AC_RunActiveContent.js,实现激活ActiveX控件。这一切都很便捷,直到你希望在html和 Flash之间传递参数。 
问题出现 
在很多商业网站中,都涉及到用同一个Flash来显示大量不同的内容(图片,视频或产品信息等),这就需要向这个Flash传递参数。常见的传参方法有三种,但都会受到AC_RunActiveContent.js的不良影响。 
1 ExternalInterface: 这是困扰我最久的一个问题。据Adobe的描述,这是最好的传参方法,能都非常自由和直接地在AS和JS之间互相传递参数或者互相调用函数。但我在使用 Adobe的示例文件时发现,在IE中AS无法得到JS的返回值(ExternalInterface在IE中的Bug),经过不断的尝试才发现是 AC_RunActiveContent.js在捣鬼,只要把它和html中对应代码以及<noscript></noscript>删除就一切正常了。 
请看示例: 
Player8,AS2: http://www.adamstudio.cn/lab/var/test/test_v8.html 
Player9,AS3: http://www.adamstudio.cn/lab/var/test/test_v9.html 
如果带有激活ActiveX控件的那段JS代码,IE中就无法得到返回值,请看: 
http://www.adamstudio.cn/lab/var/test/test_error.html 
所有源文件:http://www.adamstudio.cn/lab/var/test/test.rar 
2 FlashVars: 
3 URL传递参数 
后两种方法受AC_RunActiveContent.js的影响更大,因为这两种方法都是在<noscript></noscript>之间加入代码,而在JS能运行的浏览器当中(绝大多数浏览器都能运行JS),这些代码根本就不会运行。所以无论在Firefox或者IE中都不起任何作用! 
也就是说常用的三种在Html与AS之间传递参数的方法均受到激活ActiveX控件的那段代码的影响。所以要想在html和Flash之间传递参数,就必须摒弃Flash自带的激活ActiveX控件的方案! 

替代方案:SwfObject 请参考SwfObject解决Html与Flash之间传递参数问题

------
  评论这张
 
阅读(830)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017