为什么 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
设置为 *
似乎不是一个好主意。我从 Adobe 的安全沙箱教程之一(感谢 Adobe)获得了它。此外,通过 ExternalInterface.call
传递 "refresh();"
查找 refresh
个参数,其中有 none。 SWf
文件名但不使用破折号 -
像这样..
这个...MyFileName.swf
不是这个...My-File-Name.swf
此代码按预期执行。感谢大家的投入和帮助。
所以,由于之前的帖子数量过多,我一直避免发布这个问题。我尝试了以下代码的几种变体,但无济于事。
我正在使用 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
设置为 *
似乎不是一个好主意。我从 Adobe 的安全沙箱教程之一(感谢 Adobe)获得了它。此外,通过 ExternalInterface.call
传递 "refresh();"
查找 refresh
个参数,其中有 none。 SWf
文件名但不使用破折号 -
像这样..
这个...MyFileName.swf
不是这个...My-File-Name.swf
此代码按预期执行。感谢大家的投入和帮助。