1
import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');

上記のコードはFirefoxで動作するようですが、ChromeまたはIEで試してみると動作しません(エラーが発生し、swfの実行が停止します)。

ヒントはありますか?

4

2 に答える 2

5

IE9で動作しない

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}

どこでも動作します

if(ExternalInterface.available)
{
  ExternalInterface.call('document.location.href.toString');
}
于 2012-12-23T00:19:54.560 に答える
5

ExternalInterfaceすべての主要なブラウザの最近のバージョンで動作します。最初に行う必要があるのは、その呼び出しをチェックでラップして、現在使用可能かどうかを確認することです。

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}

ChromeとIEの問題は、window.location.hrefの呼び出しである可能性があります。最善の策は、これをJS関数に入れてから、次のようにASからその関数を呼び出すことです。

//JS:

function reportHref(){
    return window.location.href.toString(); 
    // I'm not sure this is good cross-browser JS. 
    // If it isn't, you can at least test it directly in the browser
    // and get a javascript error that you can work on.
}

//AS:
var result:String = "";
if(ExternalInterface.available)
{
    result = ExternalInterface.call("reportHref");
}
else
{
    result = "External Interface unavailable";
}
trace(result);

また、呼び出そうとする関数は、呼び出す前にDOMにすでに存在していることを確認してください。スクリプトを追加する前にSWFを追加し、ExternalInterfaceすぐに呼び出すと、失敗するため失敗reportHrefします。まだ存在します。

そして最後に、SWF内からwindow.locationオブジェクトへの呼び出しがサンドボックス化のために失敗する可能性があります。これは、ページ内のJS機能から呼び出しを行う場合には当てはまりません。

のドキュメントExternalInterfaceは非常に包括的で、良い例があります。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

于 2012-09-27T09:16:38.537 に答える