我过去几个小时一直在努力解决这个问题,我真的不知道会出现什么问题。我只是想让Javascript与Flash沟通文本。我用这个来源找到了这个很好的例子
http://blog.circlecube.com/wp-content/uploads/2008/02/ActionscriptJavascriptCommunication.zip
我在本地运行了html文件,它可以正常发送并从闪存中检索文本。然后我将相同的精确样本加载到我的开发谷歌应用服务器,我无法将文本从JavaScript发送到闪存。奇怪的是,虽然flash能够发送Javascript文本。任何人都可以看看他们是否可以使用GAE运行?万分感谢!
答案 0 :(得分:2)
它可能与谷歌应用程序引擎本身没有关系,因为整个事情都在浏览器中运行 - 除非你某处没有提到某种服务器依赖。假设情况并非如此......
如果你能够通过ExternalInterface.call()调用Flash来调用JavaScript,而不是用来调用回Flash的JavaScript,那么它可能是一两件事:你的EI回调&处理程序未正确连接(在Flash中),或者您的JavaScript没有浏览器中SWF对象的句柄。
您可能会尝试发布一些代码,但与此同时,我知道这些内容适用于IE和FireFox。首先,浏览器代码:
<html>
<head>
<script language="JavaScript" type="text/javascript">
var swfReady = false;
function callbacksInitialized()
{
swfReady = true;
}
function helloFlash()
{
if (swfReady)
{
// Get a handle on the Flash object
var swfObject = navigator.appName.indexOf("Microsoft") != -1 ? window["HelloMac"] : document["HelloMac"] ;
// Call back into the Flash file
swfObject.helloFlash(document.getElementById("txtMessage").value);
}
}
function helloMac(message)
{
alert(message);
}
</script>
</head>
<body scroll="no">
<div align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="HelloMac" width="600" height="300"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="HelloMac.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="HelloMac.swf" quality="high" bgcolor="#869ca7"
width="600" height="300" name="HelloMac" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
<br /><br />
<input type="text" id="txtMessage" value="Hello, Flash!" /><br />
<input id="btnSend" type="button" value="Send to Flash" onclick="helloFlash();" />
</div>
</body>
</html>
现在,Flash代码(在我的情况下,它是Flex,所以希望它很清楚):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" height="300" width="600">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import flash.external.ExternalInterface;
private function init():void
{
addCallbacks();
}
private function addCallbacks():void
{
ExternalInterface.addCallback("helloFlash", this_helloFlash);
ExternalInterface.call("callbacksInitialized");
}
// Display a message from the host
private function this_helloFlash(message:String):void
{
Alert.show(message);
}
// Send a string to the host
private function helloMac():void
{
if (ExternalInterface.available)
{
ExternalInterface.call("helloMac", txtMessage.text);
}
}
]]>
</mx:Script>
<mx:VBox horizontalCenter="0" verticalCenter="0">
<mx:TextInput id="txtMessage" text="Hello, Mac!" />
<mx:Button id="btnSend" label="Send to Host" click="helloMac()" />
</mx:VBox>
</mx:Application>
该示例演示Flash使用一些文本调用JavaScript,以及以相同方式回调到Flash的JavaScript。有些要注意的地方:
我不知道更多,我猜它是这两个项目之一,因为这是我的经验。希望能帮助到你!如果您有任何后续行动,我会密切关注后续帖子。
答案 1 :(得分:1)
我没有在代码中看到对allowDomain函数的调用。除此之外,安全沙箱不允许您的Flash应用程序与服务器上的闪存进行通信,反之亦然。为将要执行Flash应用的每个域添加对System.security.allowDomain("mydomain.com", "mySecondDomain.com", "etc.com")
的调用。此外,嵌入代码还需要通过包含参数<param name="allowScriptAccess" value="always" />
来指定JavaScript的访问权限。
答案 2 :(得分:0)
是的,Christian Nunciato的回答是有帮助的。问题是,当您的javascript调用flash函数时,您的swf文件不可用于javascript。 Christian的诀窍确保swf文件在你的javascript需要时加载并启动。