js与as3交互的问题

我想,是时候纠正一定以来的误区了,那就是html中的js如何获取flash的swf对象,并与as3交互。

按照官方的写法应该是在 Internet Explorer 中返回 object 标签的 id 属性,或者在 Netscape 中返回 embed 标签的 name 属性(AS3 API手册)。

function thisMovie(movieName) {
   if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
   } else {
        return document[movieName];
   }
}

但这种写法是有问题的,特别是后期的Firefox,如果object里面内嵌embed标签,它一定是返回embed对象(这个对象是function形式),而embed是无法取得as3的addcallback方法的。因此网上有很多人在叫ff里面js无法与as3交互,事实并非如此。

我对几个浏览器经过测试后,发现它们对window[id]与document[name]的兼容性如下

使用html代码:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="ExternalInterfaceExample" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
         <param name="movie" value="ExternalInterfaceExample.swf" />
         <param name="quality" value="high" />
         <param name="bgcolor" value="#869ca7" />
         <param name="allowScriptAccess" value="sameDomain" />
         <embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
             width="500" height="375" name="ExternalInterfaceExample" align="middle"
             play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer">
         </embed>
     </object>

ie8是升级以后的版本。

可以看到,使用document[id]所有浏览器都可以取得swf对象,但ff与opera不能取得as3向外暴露的方法。而使用window[name]则chrome/opera/safari不能取得as3的addcallback方法。如果兼容这两种方法opera还是不能取得as3的方法(其实并非Opera无法取得embed元素,而是这两种写法不凑效,如果使用$("embed[name=‘swfImg‘]")[0]一样是可以获取swf对象的,只是无法action交互)。里面最大的亮点是ie,无论使用哪种方法都能取得对象并与as3交互。

如果使用我们常用的document.getElementById呢,结果非常诧异

所有浏览器都能取得object标签对象,并且都能取得as3暴露的addcalback方法。

我们再来看第一表中的浏览器,能够取得Embed标签的是firefox/chrome/opera/safari浏览器,这几种浏览器都是更新换代非常快,平滑升级的现代浏览器。既然它们都支持object标签,因此无须担心是否需要嵌入Embed对象。

如果把Embed标签去掉,写法变成

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="ExternalInterfaceExample" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
         <param name="movie" value="ExternalInterfaceExample.swf" />
         <param name="quality" value="high" />
         <param name="bgcolor" value="#869ca7" />
         <param name="allowScriptAccess" value="sameDomain" />
     </object>

结果

实际上,Embed标签并非html 4.01的标准标签,但很多浏览器都支持,只是支持的程度不同。在html5中,Embed已经成为了一种标准,它可以嵌入视频、音频和Flash,但在ipad等一些设备中是无法播放Flash的,Object标签也不行。

所以,如果不考虑向前浏览器兼容的话,只管使用object嵌入Flash就行了,获取Flash元素、交互的话document.getElementById足已。

js与as3交互的问题,布布扣,bubuko.com

时间: 2024-12-19 10:38:39

js与as3交互的问题的相关文章

JS和AS交互

这个话题在网上应该说很好找,有很多这方面的资料.比者也看过一些,不过大部分都是AS2与JS进行交互.很少提到AS3,即使有,也让人感觉浅尝辄止.很多东西并没有介绍的太清楚.所有笔者萌生了写这样一篇教程的想法! 提及AS3与外部脚本的交互,笔者认为可以总结成两种.一是AS3调用外部函数,二是外部脚本调用AS3函数.无外乎就这两种.在调用函数的同时,我们还可以向函数传递一些参数.这就达到了传递数据的目的.举一个最简单的例子.我们平时在网络上看视频的时候,这些用AS3制作的播放器就是由外部脚本(可能是

UIWebView与JS的深度交互

事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > 标签自动加载,并把下载图片的操作放在native端来处理,并通过JS将图片在Cache中的地址返回给UIWebview. 之所以要把图片操作放在

转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC -----&gt;JS

目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 JavaSciptCore.framework框架介绍 JavaScriptCore是webkit的一个重要组成部分,主要是对js进行解析和提供执行环境.具体介绍请看这篇简书的文章:JavaScriptCore 使用 准备环境 创建一个名为JS与OC交互Demo的iOS工程.然后在storyboard添

UIWebView与JS的深度交互-b

要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img >  标签自动加载,并把下载图片的操作放在native端来处理,并通过JS将图片在Cache中的地址返回给UIWebview.之所以要把图片操作放在native端做的好处在于:1.可以进行本地缓存,下次进入这篇文章可以直接从缓存读取,提高响应速度并且节省用户流量.2.可以实现点击图片放大.保存图片到相册等操作

ASP.net与SQLite数据库通过js和ashx交互(连接和操作)

ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后台语言的分离,与前后台通过js的ajax实现交互,故很多百度出来的方法不成立,虽听说ashx过时,但是他实现了我要的效果:即前后台语言不是相互嵌入实现交互,而是通过js实现(有接口就可以).由于领导指定用SQLite,故这两天还折腾了SQLite,不过对于这种小型的网站,它是个很好的选择(不需要部署

Js与OC交互

Js与OC交互 源码请点击github地址下载. 下面讲述实现OC和JS的交互,它们相互调用,其中需要写一个静态的HTML文件用于提供JS方法. 效果图如下: screen.png 一.OC调用JS: 不说闲话,看代码如下 需要先在js文件定义方法postStr供oc调用 function postStr(string) { return 'I am the return parameter JS, and param ' + string; } oc代码只需一句即可调用 NSString *s

前端页面js与flash交互——js获取flash对象,并传递参数

背景介绍: 最近在搞一个项目,涉及到图片选取,裁剪,上传等,由于浏览器安全性问题,js无法获取到<input type="file">中选取的文件路径,而且对照片的裁剪,抠图等由HTML5实现的功能,对各大浏览器的兼容性,真是不敢太大胆.这个时候就引进了flash,然后所有js做不了的让flash来做,然后由js来控制页面元素.就这样开始了js与as的交互之旅,听做flash的大叔说,flash调js的函数式很好调的,而js调as不大容易.最终的情况是as调js错误层出不穷

js与C++交互

转载:http://zhidao.baidu.com/link?url=LLuWzwMmpfVcQeSGv1CrAfRXpnZaetm9xypqwMW6zxLhhKES-rITAsG0-Ku-bSMAc2nVoSFk1tOJ0biPcQIoHK 1.手动点击网页按钮C++后台响应 2.设置自动触发事件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/

史上最全的 UIWebview 的 JS 与 OC 交互

来源:伯乐在线 - 键盘风筝 链接:http://ios.jobbole.com/89330/ 点击 → 申请加入伯乐在线专栏作者 其实一直想给大家整理一下JS与OC的交互,但是没有合适的机会,今天借着微信小应用的发布,以及以后H5必定越来越流行,所以给大家整理一下. 交互方式有三种: 1.UIWebviewDelegate 2.JavaScriptCore 3.WebViewJavascriptBridge按照排序给大家介绍一下,我推荐前两种方法,第三种需要依赖第三方框架,并且不一定能拦截成功