我已经看到了这方面的问题,但是在查看了所有这些并匹配我的代码后,我无法获得正确的效果。我试图从JS调用一个简单的AS3方法。
如下:
AS3:
private function InitialiseCallbacks():void
{
ExternalInterface.call("FlashReady");
ExternalInterface.addCallback("ReturnMall", ReturnToMall);
}
public function ReturnToMall():void
{
trace("ReturnMall: WORKED"); // Not being called
this.mall_map.visible = false;
}
使用Javascript:
function FlashReady()
{
swf = document.getElementById("CaviaGame");
console.log(swf);
}
function ShoppingMallClicked()
{
$(".shoppingmallbtn").effect("shake", { times:3 }, 5);
console.log(swf);
swf.ReturnMall();
}
<div align="center" id="flashContent">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="760" height="760" name="CaviaGame" id="CaviaGame" align="top">
<param name="movie" value="CaviaGame.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="play" value="true" />
<param name="loop" value="true" />
<param name="wmode" value="window" />
<param name="scale" value="showall" />
<param name="menu" value="true" />
<param name="devicefont" value="false" />
<param value="true" name="swLiveConnect" />
<param name="salign" value="" />
<param name="allowScriptAccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="CaviaGame.swf" width="760" height="760">
<param name="movie" value="CaviaGame.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#FFFFFF" />
<param name="play" value="true" />
<param name="loop" value="true" />
<param name="wmode" value="window" />
<param name="scale" value="showall" />
<param name="menu" value="true" />
<param name="devicefont" value="false" />
<param value="true" name="swLiveConnect" />
<param name="salign" value="" />
<param name="allowScriptAccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflash">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
Javascript控制台:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="760" height="760" name="CaviaGame" id="CaviaGame" align="top">
Uncaught TypeError: undefined is not a function
从我可以看到它识别出对我的swf的引用,但是没有认识到它中有一个函数,或者没有调用它。我已经完成了从AS3到Javascript的回调,它在检索对swf的引用之前成功调用。但是,在调用该函数时,它仍然无效。
我允许在html中的swfObject中访问,我也在AS3中尝试过Security.allowDomain()也无济于事。
我自己没有创建整个项目,但是我在项目中看到了这个代码:
public function initializeMapViewerModule()
{
global.GameMode = "LoadingMapViewer";
// Initiate MapViewer Load
var queue:LoaderMax = new LoaderMax({name:"MapViewerQueue", onComplete:onLoadMapViewerModule});
queue.append( new SWFLoader("CaviaMapViewer.swf", {name:"CaviaMapViewer", estimatedBytes:5000, x:0, autoPlay:false}) );
queue.load();
} // END - initializeMapViewerModule
这可能是引用的一个包含代码的另一个swf吗?或者它是从html输入的swfObject调用的?如果是另一个我将如何引用它?
任何建议都表示赞赏,因为我真的为此搜索过重而且感到难过。
谢谢!