即使确保始终设置“allowScriptAccess”,我也无法使其工作。我成功地将Flash影片放入浏览器并调用ReceiveDataFromFlashMovie()并打印“Got here”,但似乎GetFlashMovieObject()只根据Internet Explorer中的错误消息返回NULL。我错过了什么吗?
HTML文件的负责人:
<script type="text/javascript">
function getFlashMovieObject(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else { return document[movieName] }
}
function ReceiveDataFromFlashMovie()
{
document.write("Got here");
var callResult = getFlashMovieObject("MakingButtons").myFunction();
return callResult;
}
</script>
HTML:
<script type="text/javascript">
document.write("Hello World.")
ReceiveDataFromFlashMovie();
document.write(callResult)
</script>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="500" height="500" id="MakingButtons" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="MakingButtons.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="MakingButtons.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="MakingButtons" align="middle" allowScriptAccess="always" swlliveconnect="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
ActionScript 3.0:
import flash.text.TextField;
import flash.external.*;
// The name of the Flash variable to be called in JavaScript
var flashFunction:String = "myFunction";
var instance:Object = null;
// Callback function executed by the name of variable
var realFunction:Function = callMe;
ExternalInterface.addCallback(flashFunction, realFunction);
var foo = "Goodbye!";
function callMe():String
{
return foo;
}
谢谢!
答案 0 :(得分:2)
据我了解您的问题,您唯一需要做的就是更改顺序:)
把
<script type="text/javascript">
document.write("Hello World.")
ReceiveDataFromFlashMovie();
document.write(callResult)
</script>
在对象嵌入代码之后。它没有找到它(返回undefined),因为它尚未嵌入。
答案 1 :(得分:1)
如果您使用swfObject嵌入Flash影片,则可以使用 swfobject.getObjectById 来检测您的swf并调用您的方法。
swfobject.getObjectById("MakingButtons").myExternalMethod();
如果您不使用swfObject,只需复制并通过JS代码上的getObjectById方法:
function getObjectById(objectIdStr) {
var r = null;
var o = getElementById(objectIdStr);
if (o && o.nodeName == "OBJECT") {
if (typeof o.SetVariable != UNDEF) {
r = o;
}
else {
var n = o.getElementsByTagName(OBJECT)[0];
if (n) {
r = n;
}
}
}
return r;
}
通过这样做来打电话:
getObjectById("MakingButtons").myExternalMethod();
看看这个,我实际上在我的博客上编写了一个小例子:http://www.nelsond8.com/?p=515
答案 2 :(得分:0)
您不允许加载/初始化SWF 在您可以访问SWF内部的任何内容之前,您需要确保它已准备好处理回调。