0

ExternalInterface に問題があります。

現在設定されている方法は、ページの読み込み時に JavaScript でブール値が true に設定され、それが true になるまで ActionScript コンストラクターによって (タイマーを使用して) チェックされます。これは、JavaScript が AS3 からの呼び出しを受け取る準備ができていることを示しています。

この時点で、AS3 はコールバックを追加して内部処理を行い、コンストラクターの最後で JavaScript を呼び出します。ここまでは順調ですね。JavaScript はこの時点で (上記のコールバックで定義された) AS3 の関数を呼び出しますが、ここですべてが台無しになります。

IE では、これは問題なく動作します。しかし、FireFox ではそうではありません。デバッグすると、javascript 関数が呼び出されていることがわかりますが、AS3 を呼び出そうとしても何も起こりません。タイマーも追加しようとしましたが、何らかの理由で関数 STILL がすぐに (IE で) 実行されます。

非常に奇妙なのは、その 1 ~ 2 秒後にその機能が動作することです。そのため、Flash が FireFox に完全にロードされていないように見えますか? しかし、コンストラクターの最後の行まで実行されるため、ロードされていると思います。

編集:私は実際に try/catch を実行しましたが、JavaScript は「TypeError: this.version は関数ではありません」というエラーを返します。「バージョン」への 2 番目の呼び出しは実際に機能します。

Controller.init = function() {
    try {   
        _mainController.getVersion(); // This one does not work
    }
    catch (err) {
        error = err.toString();
    }
}


Controller.addFiles = function(JSON, numberOfFiles) {
    alert(error);

    try {   
        _mainController.getVersion(); // This one works
    }
    catch (err) {
        alert(err.toString()); // This one is never called
    }
}

AS3 のコンストラクターから呼び出される init 中にエラーがスローされますが、後で JavaScript が addFiles から getVersion() を呼び出すと動作します (まったく同じ機能)。

何か考えてください、私は本当に立ち往生しています。

どうもありがとう、ルディ

4

1 に答える 1

0

Flash Ajax Bridgeを使えばもっとうまくいくかもしれません。JS が AS3 ファイルを制御できるように調整されているため、さまざまなブラウザー間で接続を確立するプロセスを抽象化できます。

プラグインからブラウザーへの通信は、最高の状態でも苦痛であることに注意してください。

于 2010-06-10T21:58:56.357 に答える