Javascript来flash通讯

时间:2008-11-18 18:47:02

标签: javascript flash actionscript

我试图从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);

无济于事。

感谢您的帮助。 标记

6 个答案:

答案 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。

http://blog.deconcept.com/swfobject/forum/discussion/1064/swfobject-21-problems-with-externalinterface-in-ie/

祝你好运。

答案 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通信,所以我会告诉大家发布我学到的东西。