import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');
上記のコードはFirefoxで動作するようですが、ChromeまたはIEで試してみると動作しません(エラーが発生し、swfの実行が停止します)。
ヒントはありますか?
import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');
上記のコードはFirefoxで動作するようですが、ChromeまたはIEで試してみると動作しません(エラーが発生し、swfの実行が停止します)。
ヒントはありますか?
IE9で動作しない
if(ExternalInterface.available)
{
ExternalInterface.call('window.location.href.toString');
}
どこでも動作します
if(ExternalInterface.available)
{
ExternalInterface.call('document.location.href.toString');
}
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
は非常に包括的で、良い例があります。