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 では「特定できない」エラーが発生します。ボグ標準を使用してみました:

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

無駄に。

助けてくれてありがとう。マーク

4

6 に答える 6

5

私は Swiff プラグインに詳しくありませんが、Javascript からフラッシュ関数を呼び出すためのプラグインは必要ありません。ネイティブで行うのはさらに簡単です。

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);
}
于 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

多分これはあなたを助けることができます、同様の問題のように見えますが、swfobject を使用しています。

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

幸運を。

于 2008-11-20T16:42:29.173 に答える
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

直接呼び出すことができます:

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

もちろん、AS コードsendResultに登録する必要があり、フラッシュ ファイルを完全にロードする必要があります (そうしないと、すべての呼び出しが失敗します)。ExternalInterface.addCallback()

例は、このgithub リポジトリ (fancyupload)にあります。 as3proj には AS ソースが含まれ、JS リモート呼び出しはSwiff.Uploader.jsにあります。

于 2008-12-01T15:15:39.830 に答える
0

コードが Internet Explorer 以外のすべてのブラウザーで動作する場合、それは Internet Explorer 用の Flash Player が ActiveX プラグインであるためであると考えられます。ActiveX は .NET 形式で通信し、Flash の外部 API は XML で通信することをどこかで読みました。

また、Internet Explorer での Javascript と Flash の通信についても学習しようとしています。

于 2009-06-15T21:51:44.237 に答える