我是AS3的新手,想从javascript触发as3函数。
AS3
package code {
import flash.display.MovieClip;
import flash.external.ExternalInterface;
import flash.text.TextFormat;
public class Main extends MovieClip {
public function Main() {
ExternalInterface.addCallback("changesize", this.setStyle);
}
protected function setStyle() {
var tf:TextFormat = new TextFormat();
tf.size = 15;
editabletext.setTextFormat(tf);
}
}
}
HTML
<html><head>
<meta charset="UTF-8">
<title>animator</title>
<style type="text/css" media="screen">
html, body { height:100%; background-color: #ffffff;}
body { margin:0; padding:0; overflow:hidden; }
#flashContent { width:100%; height:100%; }
</style>
</head>
<body>
<div id="flashContent">
<object type="application/x-shockwave-flash" data="animator.swf" width="550" height="400" id="animator" style="float: none; vertical-align:middle">
<param name="movie" value="animator.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="play" value="true">
<param name="loop" value="true">
<param name="wmode" value="window">
<param name="scale" value="showall">
<param name="menu" value="true">
<param name="devicefont" value="false">
<param name="salign" value="">
<param name="allowScriptAccess" value="always">
<a href="http://www.adobe.com/go/getflash">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player">
</a>
</object>
</div>
<script type="text/javascript">
var animator = document.getElementById('animator');
animator.changesize();
</script>
</body></html>
animator.changesize()
给了我Uncaught TypeError: animator.changesize is not a function
我还尝试更改sameDomain
和always
之间的权限访问权限。似乎都没有工作
答案 0 :(得分:1)
这是一个时间问题。只有在Flash Player加载SWF并执行Main
构造函数后,才会将回调添加到DOM中,但是在解析DOM时,您会尝试立即调用它。
由于在加载SWF之前总是会解析DOM(并且添加了回调),因此您不应该假设SWF回调始终存在并准备好进行调用。相反,SWF应该在准备就绪时调用JS。
答案 1 :(得分:0)
如评论中所述,首先检查ExternalInterface.available
是否为真并在服务器上进行测试(如果您在本地设置了一个,则可能是localhost)。
我还注意到您有<object>
但没有<embed>
标记。某些浏览器使用object标记,而其他浏览器使用embed标记。确保这些标记的ID和名称相同。
更好的是,我建议使用swfobject,因为它可以解决这些问题并使代码更清晰。请查看SWFObject External Interface article和示例