HTMLLoader オブジェクトによって読み込まれる HTML ページ内の JavaScript は、HTML ページの
window.runtime
プロパティ、
window.htmlLoader
プロパティおよび
window.nativeWindow
プロパティを使用して ActionScript の実行コンテキストに定義されたクラス、オブジェクトおよび関数を呼び出すことができます。JavaScript の実行コンテキスト内に ActionScript のオブジェクトと関数への参照を作成することによって、JavaScript コードから使用できる ActionScript のオブジェクトと関数を作成することもできます。
ActionScript から JavaScript オブジェクトにアクセスする基本のサンプル
次の例は、ActionScript オブジェクトを参照するプロパティを HTML ページのグローバル window オブジェクトに追加する方法を示しています。
var html:HTMLLoader = new HTMLLoader();
var foo:String = "Hello from container SWF."
function helloFromJS(message:String):void {
trace("JavaScript says:", message);
}
var urlReq:URLRequest = new URLRequest("test.html");
html.addEventListener(Event.COMPLETE, loaded);
html.load(urlReq);
function loaded(e:Event):void{
html.window.foo = foo;
html.window.helloFromJS = helloFromJS;
}
前の例の HTMLLoader オブジェクトに読み込まれる(test.html という名前のファイル内の)HTML コンテンツは、親 SWF ファイルに定義された
foo
プロパティおよび
helloFromJS()
メソッドにアクセスできます。
<html>
<script>
function alertFoo() {
alert(foo);
}
</script>
<body>
<button onClick="alertFoo()">
What is foo?
</button>
<p><button onClick="helloFromJS('Hi.')">
Call helloFromJS() function.
</button></p>
</body>
</html>
ドキュメントを読み込む JavaScript コンテキストにアクセスするとき、
htmlDOMInitialize
イベントを使用して、ページに定義された任意のスクリプトからアクセスできるページ構成シーケンスで前もってオブジェクトを作成できます。
complete
イベントを待つ場合に、追加されたオブジェクトにアクセスできるのは、ページの
load
イベントの後で実行されるページ内のスクリプトのみです。
JavaScript から使用できるクラス定義の作成
JavaScript で使用できるアプリケーションの ActionScript クラスを作成するために、読み込まれる HTML コンテンツを、クラス定義を含むアプリケーションドメインに割り当てることができます。JavaScript 実行コンテキストのアプリケーションドメインは、HTMLLoader オブジェクトの
runtimeApplicationDomain
プロパティで設定できます。アプリケーションドメインをプライマリアプリケーションドメインに設定するコードを以下に示します。ここでは、
runtimeApplicationDomain
を
ApplicationDomain.currentDomain
に設定しています。
html.runtimeApplicationDomain = ApplicationDomain.currentDomain;
runtimeApplicationDomain
プロパティが設定されると、JavaScript コンテキストは割り当てられたドメインとクラス定義を共有します。JavaScript でカスタムクラスのインスタンスを作成するには、次のようにして
window.runtime
プロパティを通じてクラス定義を参照し、
new
演算子を使用します。
var customClassObject = new window.runtime.CustomClass();
HTML コンテンツは互換性のあるセキュリティドメインのものである必要があります。HTML コンテンツが、割り当てるアプリケーションドメインとは異なるセキュリティドメインのものである場合、そのページは代わりにデフォルトのアプリケーションドメインを使用します。例えば、インターネットからリモートページを読み込む場合、ページのアプリケーションドメインとして ApplicationDomain.currentDomain を割り当てることはできません。
イベントリスナーの削除
ランタイムオブジェクト、読み込まれた SWF コンテンツ内のオブジェクト、他のページで実行中の JavaScript オブジェクトなど、現在のページ以外のオブジェクトに JavaScript イベントリスナーを追加する場合、ページの読み込みを解除するときに必ずイベントリスナーを削除する必要があります。そうしないと、イベントリスナーは存在しなくなったハンドラー関数に対してイベントを送出します。この事象が発生すると、「The application attempted to reference a JavaScript object in an HTML page that is no longer loaded.」というエラーメッセージが表示されます。不要なイベントリスナーを削除すると、AIR が関連するメモリを再生することもできます。詳しくは、
移動する HTML ページでのイベントリスナーの削除
を参照してください。
|
|
|