HTMLLoader sınıfı hakkında

Adobe AIR 1.0 ve üstü

Adobe AIR HTMLLoader sınıfı, AIR uygulamasında HTML içeriğini görüntüleyebilen görüntüleme nesnesini tanımlar. SWF tabanlı uygulamalar, var olan bir pencereye HTMLLoader denetimi ekleyebilir veya HTMLLoader.createRootWindow() öğesine sahip HTMLLoader nesnesini otomatik olarak içeren bir HTML penceresi oluşturabilir. HTMLLoader nesnesine yüklenen HTML sayfasından JavaScript window.htmlLoader özelliği aracılığıyla erişilebilir.

URL'den HTML içeriği yükleme

Aşağıdaki kod, HTMLLoader nesnesine bir URL yükler (uygulamanızdaki HTML içeriğini görüntülemek için HTMLLoader nesnesini sahne veya diğer görüntü nesnelerinin alt öğesi olarak ekleyin):

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

HTMLLoader nesnesinin width ve height özellikleri varsayılan olarak 0'a ayarlanmıştır. Sahneye HTMLLoader nesnesi eklerken bu boyutları ayarlamak isteyeceksiniz. HTMLLoader öğesi, sayfa yüklenirken birçok olay gönderir. Yüklenen sayfayla etkileşim kurmanın ne zaman güvenli olduğunu belirlemek için bu olauları kullanabilirsiniz. Bu olaylar, AIR'de HTML bağlantılı olayları işleme bölümünde anlatılmıştır.

Not: Flex çerçevesinde, yalnızca UIComponent sınıfını geliştiren sınıflar Flex Container bileşenlerinin alt öğesi olarak eklenebilir. Bu nedenle, bir HTMLLoader öğesini doğrudan Flex Container bileşeninin alt öğesi olarak ekleyemezsiniz; ancak Flex mx:HTML denetimini kullanabilir, UIComponent bileşeninin alt öğesi olarak UIComponent öğesini geliştiren HTMLLoader öğesini içeren özel bir sınıf oluşturabilir veya HTMLLoader öğesini UIComponent öğesinin alt öğesi olarak ekleyip UIComponent öğesini Flex kabına ekleyebilirsiniz.

Ayrıca TextField sınıfını kullanarak HTML metni oluşturabilirsiniz, ancak bunun özellikleri sınırlıdır. Adobe® Flash® Player’ın TextField sınıfı, HTML işaretleme alt kümesini destekler, ancak boyut sınırlamaları nedeniyle özellikleri sınırlıdır. (Adobe AIR'de bulunan HTMLLoader sınıfı Flash Player'da mevcut değildir.)

Bir dizeden HTML içeriğini yükleme

HTMLLoader nesnesinin loadString() yöntemi, HTML içeriğinin bir dizesini HTMLLoader nesnesine yükler:

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

loadString() yöntemi yoluyla yüklenen içerik varsayılan olarak aşağıdaki karakteristiklere sahip uygulama dışı bir sanal alanda konumlandırılır:

  • Ağdan içerik yüklemek için erişime sahiptir (Ancak dosya sisteminden değil.)

  • Verileri XMLHttpRequest kullanarak yükleyemez.

  • window.location özelliği "about:blank" olarak ayarlanır.

  • İçerik, window.runtime özelliğine (herhangi bir uygulama dışı sanal alanda yer alan içeriğin erişebildiği biçimde) erişemez.

AIR 1.5'te, HTMLLoader sınıfı bir placeLoadStringContentInApplicationSandbox özelliği içerir. Bu özellik HTMLLoader nesnesi için true olarak ayarlandığında, loadString() yöntemiyle yüklenen içerik uygulama sanal alanında konumlandırılır. (Varsayılan değer, false değeridir.) Bu, loadString() yöntemiyle yüklenen içerik için window.runtime özelliğine ve diğer tüm AIR API'lerine erişim sağlar. Bu özelliği true olarak ayarladığınızda, loadString() yöntemine yapılan çağrıda kullanılan dizeye ilişkin veri kaynağının güvenilir olduğundan emin olun. Bu özellik true olarak ayarlandığında, HTML dizesindeki kod ifadeleri tam uygulama ayrıcalıklarıyla yürütülür. Bu özelliği yalnızca dizenin zararlı kodlar içermediğinden emin olduğunuzda true olarak ayarlayın.

AIR 1.0 veya AIR 1.1 SDK'larıyla derlenen uygulamalarda, loadString() yöntemiyle yüklenen içerik uygulama sanal alanında konumlandırılır.

HTML ve AIR uygulamalarının kullanımında önemli güvenlik kuralları

AIR uygulamasıyla kurduğunuz dosyalar AIR API'lerine erişime sahiptir. Güvenlik nedenleriyle, diğer kaynaklardan gelen içerik bu erişime sahip değildir. Örneğin bu kısıtlama uzak bir etki alanından (http://ornek.com gibi) gelen içeriğin kullanıcının masaüstü dizini içeriğini okumasını (veya daha kötüsünü) engeller.

Çünkü eval() işlevinin (ve ilgili API'lerin) çağrılması yoluyla yararlanılabilecek güvenlik boşlukları mevcuttur, uygulamayla yüklenen içerik, varsayılan olarak bu yöntemleri kullanamaz. Ancak, bazı Ajax çerçeveleri eval() işlevini ve ilgili API'leri çağırma yolunu kullanır.

İçeriği bir AIR uygulamasında çalışmak üzere düzgün biçimde yapılandırmak için farklı kaynaklardan gelen içerikteki güvenlik kısıtlamalarına ilişkin kuralları dikkate almalısınız. Farklı kaynaklardan gelen içerik, sanal alan adı verilen ayrı güvenlik sınıflandırmalarına yerleştirilir (bkz. Güvenlik sanal alanları). Varsayılan olarak, uygulamayla yüklenen içerik uygulama sanal alanı olarak bilinen bir sanal alana yüklenir ve bu sayede AIR API'lerine erişebilir. Uygulama sanal alanı güvenilmeyen kodların yürütülmesini engellemek üzere tasarlanmış kısıtlamalar içerdiğinden, genellikle en güvenli sanal alandır.

Çalışma zamanı, uygulamanızla yüklenen içeriği uygulama sanal alanından farklı bir sanal alana yüklemenize olanak verir. Uygulama dışı sanal alanlardaki içerik, tipik web tarayıcılarınınkine benzer bir güvenlik ortamında çalışır. Örneğin, uygulama dışı sanal alanlardaki kod eval() yöntemini ve ilgili yöntemleri kullanabilir. (Ancak aynı zamanda AIR API'lerine erişme izni yoktur.) Çalışma zamanı, içeriğin farklı sanal alanlarda güvenli biçimde iletişim kurmasına yönelik yollar içerir (örneğin, AIR API'lerini uygulama dışı içeriğe göstermeden). Ayrıntılar için bkz. Farklı güvenlik sanal alanlarında çapraz komut dosyası içeriği.

Güvenlik nedenleriyle sanal alanda kullanımı kısıtlanmış olan kodu çağırdığınızda çalıştırma zamanı bir JavaScript hatası gönderir: “Uygulama güvenlik sanal alanında JavaScript koduna ilişkin Adobe AIR çalıştırma zamanı güvenlik ihlali.”

Bu hatayı önlemek için sonraki Güvenlikle ilişkili JavaScript hatalarını önleme bölümünde anlatılan kodlama uygulamalarını takip edin.

Daha fazla bilgi için, bkz. Adobe AIR'de HTML güvenliği.