0

Flash プロジェクト内から外部 URL を開きたいです。私は通常、次のようなものを使用します。

getURL("javascript:newwin=window.open('http://someurl.com','','');");

ただし、Javascript が使用できない場合 (SWF が HTML に埋め込まれていない場合)、これは失敗します。Javascript が利用可能かどうかを確認するにはどうすればよいですか? 利用できない場合は、おそらく getURL を使用して直接 URL を指定しますが、Javascript メソッドを使用できない場合にのみこれを行いたいと考えています。ありがとう!

4

2 に答える 2

5

あなたが説明していることを達成するための最良の方法は、「pingJavaScript」と呼ばれる JavaScript 関数を Flash で呼び出すことです。JavaScript が実行されている場合、その JavaScript 関数は、「receiveJSNotification」と呼ばれる Flash ムービーの関数を呼び出します。したがって、Flash ムービーでそのメソッドが呼び出された場合、JS が実行されていることがわかります。

Flash ムービーと JavaScript の間の堅牢な通信を有効にするには、ムービーの最初のフレームの Actionscript の先頭にこれを含めます。

import flash.external.ExternalInterface;
import flash.events.Event;

JavaScript から「はい、生きています」を受け取る関数を追加します。

var js_available = false;

function receiveJSNotification(str:String):void {
 _root.js_available = true;
}

ExternalInterface.addCallback("notifyFlash", receiveJSNotification);
ExternalInterface.call("pingJavaScript", null);

JavaScript の場合:

function pingJavaScript()
{
    var movie = getFlash();
    movie.notifyFlash();
}

function getFlash()
{
    var movie = null;
    if (navigator.appName.indexOf('Microsoft') != -1) {
        movie = window['flashmovie'];
    } else {
        movie = document['flashmovie'];
    }
    return movie;
}
于 2009-02-12T16:36:33.887 に答える
3

実際には、これを達成するためのはるかに簡単な方法があることがわかりました。

public function isThereJavaScript():Boolean{
    return Boolean(ExternalInterface.call("window.location.href.toString"));
}

これには JavaScript バックエンドは必要ありません。それは一貫して機能します。JavaScript を呼び出す機能がある場合、それは、null 以外の location.href を持つウィンドウ プロパティが必要であることを意味します。AS2 と AS3 の両方で ExternalInterface も使用できます。

于 2009-02-18T15:43:21.597 に答える