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