HTML到嵌入式Flash-ExternalInterface回调获胜'不起作用
HTML to embedded Flash - ExternalInterface callback won't work
我是一名HTML新手,因此非常感谢您的帮助。
我想在我的HTML JS和嵌入的SWF之间进行通信。我可以从Flash中调用html中的JS函数,这很有效。但是我不能从JS回调到Flash。
我已经将代码精简到最低限度,但仍然没有成功。这是我的AS3:代码
package
{
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class CFacebook extends Sprite
{
public function CFacebook()
{
init();
}
private function init():void
{
ExternalInterface.addCallback("myFlashcall",myFlashcall);
btn1.addEventListener(MouseEvent.CLICK, onClick1);
btn2.addEventListener(MouseEvent.CLICK, onClick2);
}
public function myFlashcall(str:String):void
{
txtDebug.text = "myFlashcall = " + str;
}
protected function onClick1(event:MouseEvent):void
{
ExternalInterface.call("myFBcall1");
}
protected function onClick2(event:MouseEvent):void
{
ExternalInterface.call("myFBcall2");
}
}
}
这一切都有效——除了从未调用过的回调。这是我的HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple Flash Embed</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" >
function myFBcall1()
{
alert("test1");
}
function myFBcall2()
{
document.getElementById("SwfFacebook").myFlashcall("IT WORKS");
alert("test2");
}
</script>
</head>
<body>
<object type="application/x-shockwave-flash"
data="SwfFacebook.swf"
width="640" height="480">
<param name="movie" value="SwfFacebook.swf" />
<param name="allowScriptAccess" value="always"/>
<param name="allowFullScreen" value="true"/>
<p>Alternative content -- Can contain any HTML: DIVs, IMGs, etc.</p>
</object>
</body>
</html>
当我点击第一个按钮时,会显示我的第一个提醒。第二个ALERT永远不会显示,我的SWF中的回调函数也永远不会被调用。
感谢
您没有嵌入SWF的ID,所以当您进行调用时:
document.getElementById("SwfFacebook").myFlashcall("IT WORKS");
什么也没发生。
我强烈建议您使用SWFObject嵌入工具,它现在几乎是一个标准。链接到库
当你嵌入swf时,你只需要传递一个Args数组,如下所示:
var attributes = {
id:"flashObject",
name: "flashObject",
};
或者您想要的任何ID或名称,然后拨打
document.getElementById("flashObject").myFlashcall("IT WORKS");
如果您使用的是Flash Builder、Flash Develop甚至Intellij IDEA,它会自动生成一个包含swfobject的索引HTML页面,因此您只需要调整id和/或name字段。(您应该至少有id字段不为空);
顺便说一句,我建议您在添加回调或调用外部函数之前检查ExternalInterface的可用性:
private function init():void
{
if(ExternalInterface.available)
{
ExternalInterface.addCallback("myFlashcall",myFlashcall);
btn1.addEventListener(MouseEvent.CLICK, onClick1);
btn2.addEventListener(MouseEvent.CLICK, onClick2);
}
}
==========UPDT:
有时(当使用默认的Chrome flash播放器时)它在本地不起作用,如果你在任何远程服务器上启动应用程序,它就会起作用。尝试将其上传到某个位置并检查
相关文章:
- PhoneGap读写文件获胜'不起作用
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- webpack-request(jquery)获胜'不起作用
- colorbox与元素实时绑定'分组获胜'不起作用
- jQuery验证插件停止表单提交,提交按钮获胜'不起作用
- 鼠标悬停功能获胜'不起作用
- Cucumber JS超时获胜'不起作用
- UIWebView调用带有参数的JS获胜'不起作用
- jquery id匹配但获胜'根本不起作用
- JQuery animate获胜'不起作用
- 用JavaScript更改按钮的背景颜色获胜'不起作用
- JQuery方法获胜'分配给这个变量后不起作用
- 骨干视图委派事件获胜'不起作用
- Jquery.show按钮获胜'不起作用
- HTML到嵌入式Flash-ExternalInterface回调获胜'不起作用
- Javascript:外部函数获胜'不起作用
- Javascript if子句获胜'不起作用
- 我的Jquery代码仍然获胜'不起作用,但firebug什么也没表现出来
- jQuery AJAX POST to Rails 3.2.1 Params获胜'不起作用
- html页面中的Java脚本获胜'不起作用,但它在drupal页面上确实起作用