我试图从javascript调用一个Actionscript函数,但我在Internet Explorer中遇到问题。 我在mootools 1.2.1中使用Swiff.remote来调用actionscript函数,即:
Swiff.remote(playSwf.toElement(), 'sendResult', result, plays, name);
这一切在FireFox,Safari和Opera中运行良好,但我在Internet Explorer 6和7中收到“未指定”的错误。 我尝试过使用沼泽标准:
window['flash'].sendResult(result, plays, name);
无济于事。
感谢您的帮助。 标记
答案 0 :(得分:5)
我不熟悉Swiff插件,但你不需要插件来从Javascript调用flash函数。在本地进行它更容易。
来自AS:
//1. calling javascript function from Flash.
ExternalInterface.call("sendData",tempStr);
// argument 1: javascript function, argument 2: data/variables to pass out.
//2. calling javascript function from Flash with recursion.
var returnValue:String = ExternalInterface.call("sendReturn",tempStr).toString();
//3. setting up a callback function for javascript
ExternalInterface.addCallback("callFlash",flashResponse);
// argument 1: function name called by javascript, argument 2: function on the Flash side.
// AS2 version looks like this : ExternalInterface.addCallback("callFlash",null,flashResponse);
来自JS:
//1. javascript function as called from Flash.
function sendData(val){
alert(val);
document.flashForm.flashOutput.value = val;
}
//2. javascript function with recursion.
function sendReturn(val){
var tempData = "Hello from JS";
return tempData + ' :return';
}
//3. calling Flash function with javascript.
function sendToFlash(val){
window['flash'].callFlash(val);
}
答案 1 :(得分:2)
啊,这是你问题的答案。
<form>
<input type="button" onclick="callExternalInterface(id)" value="Call ExternalInterface" />
</form>
<script>
function callExternalInterface(id) {
thisMovie("externalInterfaceExample").callAS(id);
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
</script>
如果客户端是Internet Explorer,您应该从文档对象中获取影片。 : - )
答案 2 :(得分:0)
想发布这个答案,因为这个可能会导致其他人出现问题,显然这不会导致你的问题。仍在为您的问题寻找解决方案。
来自MooTools文档:http://mootools.net/docs/Utilities/Swiff 注意:
必须使用ExternalInterface组件编译SWF文件。有关更多信息,请参阅外部接口上的Adobe文档。
动作脚本2.0
import flash.external.*;
动作脚本3.0
package com
{
import flash.external.ExternalInterface;
public class Main
{
}
}
答案 3 :(得分:0)
也许这可以帮助你,看起来像一个类似的问题,但使用swfobject。
祝你好运。答案 4 :(得分:0)
您可以直接致电:
playSwf.remote('sendResult', result, plays, name)
当然sendResult
必须在AS代码中注册ExternalInterface.addCallback()
并且 flash文件必须完全加载(否则所有调用都会失败)。
可在此github repository (fancyupload)中找到一个示例:as3proj包含AS源,JS远程调用位于 Swiff.Uploader.js 。
答案 5 :(得分:0)
如果您的代码适用于除Internet Explorer之外的所有浏览器,那么这是一个很好的选择,因为IE的Flash Player是一个ActiveX插件。我在某处读到ActiveX以.NET格式通信,Flash的外部API以XML格式进行通信。
我也在尝试在Internet Explorer上学习Javascript-Flash通信,所以我会告诉大家发布我学到的东西。