4

javascript から swf にアクセスしようとしていたので、livedocs のこの例を変更しようとしています。http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#includeExamplesSummary

しかし、何らかの理由で正しく動作しません。私が遭遇している問題は、Safari と Firefox では機能しないことです。javascript が値を swf に渡す前に、関数にアラートを入れた場合にのみ機能します。(少し時間がかかるようです)as3でタイマーも設定しようとしましたが、タイマーが機能せず、jsのアラートのみが役立ちます。

私がやりたかったのは、js を使用して、swf ファイルに ep1.swf を再生するように指示することだけです。ここに私のjsコードがあります:

document.observe('dom:loaded', function() {
    $('episode1').observe('click', function() {
        var params = {wmode : "transparent", allowScriptAccess:"always", movie:"header"};
        swfobject.embedSWF("swf/float.swf", "header", "100%", "100%", "9.0.0","expressInstall.swf", "", params, "");
        sendToActionScript("ep1.swf");
    });
})
function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        //alert("aaa")
        return document[movieName];
    }
}
function sendToActionScript(value) {     
    thisMovie('header').sendToActionScript(value);       
}

これが私のas3コードです:

private function receivedFromJavaScript(value:String):void {

    loader.load(new URLRequest(value));

}

私は本当に長い間試してきましたが、これを修正する方法を知っている人はいますか? ありがとう。

4

3 に答える 3

8

問題は、SWF ファイルを呼び出そうとする時点で、SWF ファイルが完全にロードされていないことです。フラッシュ プレーヤーがロードされている可能性がありますが、swf ファイルのロードと初期化に時間がかかります。

あなたがする必要があるのは、ロードされたときにSWFファイルからjavascript関数を呼び出し、現在実行しているように見えるページロードハンドラーではなく、そこにJavaScriptを配置することです。そうすれば、それまでにフラッシュ アプリケーションが適切に初期化されていることがわかります。使用している ExternalInterface クラスには、javascript にコールバックできるメソッドがあります。

于 2008-11-21T15:39:26.850 に答える
1

このコードを使用して、swfオブジェクトを取得します。

私はこのコードを次のようにテストしました:

  • IE 9,8,7
  • Firefox 6.0.1
  • Netscape Navigator 9.0.0.6
  • Opera 11.5
  • グーグルクローム13.0.782.215
  • Safari 3.2(すべてWindows OSの場合)

そしてそれはうまくいきました。

function GetSWF(strName) {
    if (window.document[strName] != null) {
        if (window.document[strName].length == null)
            return window.document[strName];
        else
            return window.document[strName][1];
    } else {
        if (document[strName].length == null)
            return document[strName];
        else
            return document[strName][1];
    }
}
于 2011-09-06T13:34:32.007 に答える