8

我正在尝试从 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 中出现“未指定”错误。我尝试使用 bog 标准:

window['flash'].sendResult(result, plays, name);

无济于事。

谢谢你的帮助。标记

4

6 回答 6

5

我不熟悉 Swiff 插件,但您不需要插件即可从 Javascript 调用 flash 函数。在本地实现它甚至更容易。

从作为:

//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);
}
于 2008-11-18T19:41:55.397 回答
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,您应该从文档对象中获取电影。:-)

于 2008-11-18T20:28:56.393 回答
0

如果您的代码可以在除 Internet Explorer 之外的所有浏览器中运行,那肯定是因为用于 IE 的 Flash Player 是一个 ActiveX 插件。我在某处读到 ActiveX 以 .NET 格式进行通信,而 Flash 的外部 API 以 XML 进行通信。

我也在尝试在 Internet Explorer 上学习 Javascript-Flash 通信,所以我会及时向大家发布我所学的内容。

于 2009-06-15T21:51:44.237 回答
0

想发布这个答案,因为这可能是给其他人造成问题的原因,显然这不会导致您的问题。仍在为您的问题寻找解决方案。

来自 MooTools 文档: http: //mootools.net/docs/Utilities/Swiff 注意:

SWF 文件必须与 ExternalInterface 组件一起编译。有关详细信息,请参阅有关外部接口的 Adob​​e 文档。

动作脚本 2.0

import flash.external.*;

动作脚本 3.0

package com
{
   import flash.external.ExternalInterface;
   public class Main 
   {
   }
}
于 2008-11-20T16:33:40.750 回答
0

也许这可以帮助你,看起来像一个类似的问题,但使用 swfobject。

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

祝你好运。

于 2008-11-20T16:42:29.173 回答
0

你可以直接调用它:

playSwf.remote('sendResult', result, plays, name)

当然sendResult必须ExternalInterface.addCallback()在 AS 代码中注册,并且闪存文件必须完全加载(否则所有调用都会失败)。

可以在这个github 存储库 (fancyupload)中找到一个示例: as3proj 包含 AS 源代码,JS 远程调用位于Swiff.Uploader.js中。

于 2008-12-01T15:15:39.830 回答