为什么 ExternalInterface 不调用 javascript - Flash CC 和 AS3

Why is ExternalInterface not calling javascript - Flash CC and AS3

所以,由于之前的帖子数量过多,我一直避免发布这个问题。我尝试了以下代码的几种变体,但无济于事。

我正在使用 FireFox(最新)、Flash Player(最新)、AS3 和几行 JavaScript。

这是我的 AS3:

import flash.external.*;

// Handling Count For External Refreshing

var count: Number = 0;
var countMax: Number = 3;

function countHandler(): void {
    if (count >= countMax) {
        trace("The count has reached the max " + countMax);
        ExternalInterface.call("refresh");
        count = 0;
    } else {
        trace("The Count is " + count)
        return;
    }
}

我已经跟踪了计数、总数,所有这些,所以我知道代码正在运行。它甚至在到达 3

时重置 count

这是 javascript:

<script language="JavaScript">
    function refresh() {
        window.location.reload();
    }
</script>

对于giggles/testing,我在页面中添加了一个按钮来测试上面的代码是否有效...

<input type="button" value="Reload Page" onClick="refresh()">

当我按下按钮时,它会刷新页面。

有什么我想念的吗?为什么工作的AS3不会通过触发工作javascript来刷新页面?

当我单击按钮时,它会刷新,当代码通过 ActionScript 触发时,我无法按下任何 SWF 按钮。所以它正在触发,但实际上并没有刷新整个页面。

7 月 4 日更新 - 更新了 AS3 和 Java - 仍然没有运气

感谢 Akmozo 的帮助。

allowScriptAccess 设置为 always - 而不是 * 就像 adobe 教程所说的那样(混蛋)。 SWF 不能有任何连字符或破折号。我必须将文件名设置为 My.Test.File.fla 所以当我 export/build 它输出以下 flashContent

<div id="flashContent">
    <object type="application/x-shockwave-flash" data="My.Test.File.swf" width="1920" height="1080" id="My.Test.File" style="float: none; vertical-align:middle">
        <param name="movie" value="My.Test.File.swf" />
        ...
        <param name="allowScriptAccess" value="always" />
        ...
    </object>
</div>

有关命名法中符号的更多信息 - Here

这是我使用的 ActionScript。

// Handling Count For External Refreshing
var count: Number = 0; //start count at 0
var countMax: Number = 3; //max whatever you need it to be
var isAvailable: Boolean = ExternalInterface.available; // checking if avail 

trace(isAvailable); 

function countHandler(): void {
    if (count >= countMax) {
        trace("The count has reached the max " + countMax); // Trace in flash 
        ExternalInterface.call("console.log", "testing..."); // Output to Console
        ExternalInterface.call("refresh"); //fire the refresh script
        count = 0; // reset the count
    } else {
        trace("The Count is " + count)
        return;
    }
}

这是 java 脚本。置于<head>下方<style>

<script language="JavaScript">
        function refresh() {
            console.log("Try To Refresh");
            window.location.reload();
        }
  </script>

我必须创建一个 crossdomain.xml 文件以允许访问。我已经在使用和不使用 crossdomain.xml 的情况下对该项目进行了多次测试,如果没有它,我会收到 security sandbox 错误。不确定为什么 allowScriptAccess="always" 不起作用。

结论 因此,将 allowScriptAccess 设置为 * 似乎不是一个好主意。我从 Adob​​e 的安全沙箱教程之一(感谢 Adob​​e)获得了它。此外,通过 ExternalInterface.call 传递 "refresh();" 查找 refresh 个参数,其中有 none。 SWf 文件名但不使用破折号 - 像这样..

这个...MyFileName.swf

不是这个...My-File-Name.swf

此代码按预期执行。感谢大家的投入和帮助。