html中js调用as问题备忘

来源:互联网 发布:php 通过身份证号码 编辑:程序博客网 时间:2024/05/18 13:11
几种html加载swf的方式比较请参见:
http://www.w3help.org/zh-cn/causes/HO8001

该文章分析了眼下几种主流浏览器下页面嵌入swf文件的方式的比较。
着重强调了页面中swf文件的展示效果。

经我亲测,除去笔者经常使用的Object嵌embed方式之外,该文章描述的第3种方式也可以较平稳的兼容目前的主流浏览器。
adobe官方推荐的引用第三方js文件"swfobject.js"加载和获取swf也具有非常良好的兼容性。



这次遇到的问题并不光是html加载swf,而是在html中js和as的相互调用问题。
众所周知,在as3中flash.external.ExternalInterface提供了call和addCallBack方法供as与外部脚本语言通讯。一般在flash中呼叫js方法问题不大,只要页面能够加载显示出swf文件就都能调用到该页面下或者该页面可引用到的js方法。
问题在于js想调用swf文件中的as方法就又关系到了页面加载flash的方式在不同浏览器中的兼容问题了。
为此我搜集到了以下资料,并加以测试。

http://apps.hi.baidu.com/share/detail/11409390

正如该教程开头所述:大家在开发过程中会遇到两个坎,一个是调用flash对象调用不到,一个是调用函数调用不到了。
该教程以object标签嵌套embed加载方式为基础,清晰的阐述了这两个问题。

在此我补充一点以作备忘,一般在使用object嵌套embed方式加载swf时,习惯将两者的id设成相同的字符串。读过上面教程之后我们知道这样在IE内核和非IE内核下只有一种可以兼容。所以必须将两者id加以区分。这样做的成果就是……IE系、ff和opera下不仅as可以推倒js,js也可以逆推as了~
但是在实际测试中我发现,即使是将id区分,运行在chrome和safari下无论js怎么呼唤as依然很傲娇。
问题出在哪呢?既然在IE系和ff下可以调到,说明函数是可以成功调用的,那么问题仍出在浏览器找不到swf对象上。
后来在一个不相关的帖子的回复里找到启发。我修改了embed标签将id改成name……按下我的钛合金嵌钻f5……世界安静了。

后来想想,可能是同样取embed标签的老牌ff和opera“老谋深算”,取embed的时候认name也认id。具体内容日后再考证吧。看来……safari和chrome这批次世代浏览器还有一段路要追赶呢。

时间仓促,有些细节测试和论证不足,资以备忘。欢迎看官讨论斧正
原创粉丝点击