ActionScript nesnelerini JavaScript için kullanılabilir duruma getirme

Adobe AIR 1.0 ve üstü

HTMLLoader nesnesi tarafından yüklenen HTML sayfasındaki JavaScript, ActionScript yürütme bağlamında HTML sayfasının window.runtime , window.htmlLoader ve window.nativeWindow özellikleri kullanılarak tanımlanan sınıfları, nesneleri ve işlevleri çağırabilir. Ayrıca JavaScript yürütme bağlamında ActionScript nesneleri ve işlevlerine başvurular oluşturarak bunları JavaScript için kullanılabilir duruma getirebilirsiniz.

JavaScript nesnelerine ActionScript üzerinden erişmenin basit bir örneği

Aşağıdaki örnek, ActionScript nesnelerine başvuru yapan özelliklerin bir HTML'sayfasının global window nesnesine nasıl eklendiğini gösterir:

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; 
}

Önceki örnekte HTMLLoader nesnesine yüklenen HTML içeriği (test.html adlı bir dosyada) üst SWF dosyasında tanımlanan foo özelliği ve helloFromJS() yöntemine erişebilir:

<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>

Yüklenen bir belgenin JavaScript bağlamına erişirken, sayfa yapım sırasında nesneleri sayfada tanımlanan tüm komut dosyalarının erişebileceği kadar erken oluşturmak için htmlDOMInitialize olayını kullanabilirsiniz. Complete olayını beklerseniz, yalnızca sayfa load olayından sonra çalışan sayfadaki komut dosyaları eklenen nesnelere erişebilir.

Sınıf tanımlarını JavaScript için kullanılabilir duruma getirme

Uygulamanızın ActionScript sınıflarını JavaScript'te kullanılabilir duruma getirmek için, yüklenen HTML içeriğini sınıf tanımlarını içeren uygulama etki alanına atayabilirsiniz. JavaScript yürütme bağlamının uygulama etki alanı, HTMLLoader nesnesinin runtimeApplicationDomain özelliğiyle ayarlanabilir. Uygulama etki alanını birincil uygulama etki alanı olarak ayarlamak için runtimeApplicationDomain öğesini aşağıdaki kodda gösterildiği şekilde ApplicationDomain.currentDomain olarak ayarlayın:

html.runtimeApplicationDomain = ApplicationDomain.currentDomain;

runtimeApplicationDomain özelliği ayarlandığında, JavaScript bağlamı sınıf tanımlarını atanan etki alanıyla paylaşır. JavaScript'teki özel bir sınıfın örneğini oluşturmak için window.runtime özelliği aracılığıyla sınıf tanımına başvuru yapın ve new operatörü kullanın:

var customClassObject = new window.runtime.CustomClass();

HTML içeriği uyumlu bir güvenlik etki alanından geliyor olmalıdır. HTML içeriği atadığınız uygulama etki alanından farklı bir güvenlik etki alaından geliyorsa, sayfa bunun yerine varsayılan uygulama etki alanını kullanır. Örneğin, İnternet'ten uzak bir sayfa yüklediğinizde ApplicationDomain.currentDomain öğesini sayfanın uygulama etki alanı olarak atayamazsınız.

Olay dinleyicilerini kaldırma

Runtime nesneleri, yüklenen SWF içeriğindeki nesneler ve hatta diğer sayfalarda çalışan JavaScript nesneleri de dahil güncel sayfa dışındaki nesnelere JavaScript olay dinleyicileri eklediğinizde, sayfa boşaldığında her zaman bu olay dinleyicilerini kaldırmalısınız. Aksi halde, olay dinleyicisi artık var olmayan bir işleyici işlevine olay gönderir. Bu gerçekleşirse, şu hata mesajını görürsünüz: “Uygulama artık yüklenmeyen bir HTML sayfasındaki JavaScript nesnesine başvuruda bulunmaya çalıştı." Gerekli olmayan olay dinleyicilerinin kaldırılması, AIR'in ilişkilendirilmiş belleği geri istemesine olanak verir. Daha fazla bilgi için bkz. Gezinilen HTML sayfalarındaki olay dinleyicilerini kaldırma .