我正在尝试使用ExternalInterface.addCallback来允许js调用as3方法。我的代码如下:
AS:
ExternalInterface.addCallback("sendToActionscript", callFromJavaScript);
function callFromJavaScript():void{
circle_mc.gotoAndStop("finish");
}
JS:
<button type="button" onclick="callToActionscript()">Switch to square</button>
<script type="text/javascript">
function callToActionscript() {
flashController = document.getElementById("jstoactest")
flashController.sendToActionscript();
}
</script>
它不起作用。我做错了什么?
答案 0 :(得分:1)
我在JS中将isFlashReady标志设置为FALSE。然后当加载SWF时,在触发Event.ADDED_TO_STAGE之后,我添加ExternalInterface.addCallback并将isFlashReady标志翻转为TRUE。这可以防止在SWF准备好之前调用SWF。您可能希望在下面的JS函数中抛出alert()以查看它被卡住的位置。希望这会有所帮助。
JS:
var isFlashReady = false;
function thisMovie(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1)
return window[movieName];
}else{
return document[movieName];
}
function callToActionScript(value)
{
if(isFlashReady)
{
thisMovie("SWFID").sendToActionScript();
}
}
function flashReady(value)
{
isFlashReady = true;
}
AS
if (ExternalInterface.available) {
try {
ExternalInterface.addCallback("sendToActionScript", callFromJavaScript);
flash.external.ExternalInterface.call(flashReady,true);
} catch (error:SecurityError) {
trace("A SecurityError occurred: " + error.message + "\n");
} catch (error:Error) {
trace("An Error occurred: " + error.message + "\n");
}
} else {
trace("External interface is not available for this container.");
}
答案 1 :(得分:0)
确保在嵌入Flash时将AllowScriptAccess设置为“always”或“sameDomain”,看看是否有帮助。 livedocs
答案 2 :(得分:0)
您的SWF文件是否与HTML页面在同一个域中提供?如果域名不同,则您需要使用Security.allowDomain来允许两者进行通信。
另外,我找到了调试Flash的最简单方法 - &gt; JavaScript通信是使用FireBug for Firefox。 (对不起,我只能发一个链接!)