Görüntüleme içeriğini dinamik olarak yükleme

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Şu harici görüntüleme varlıklarından herhangi birini ActionScript 3.0 uygulamasına yükleyebilirsiniz:

  • ActionScript 3.0'da geliştirilmiş bir SWF dosyası—Bu dosya bir Sprite, MovieClip veya Sprite öğesini genişleten herhangi bir sınıf olabilir.

  • Görüntü dosyası—Bunlar arasında JPG, PNG ve GIF dosyaları yer alır.

  • AVM1 SWF dosyası—Bu, ActionScript 1.0 veya 2.0'da yazılmış bir SWF dosyasıdır.

Loader sınıfını kullanarak bu varlıkları yüklersiniz.

Görüntüleme nesnelerini yükleme

Loader nesneleri, bir uygulamaya SWF dosyaları ve grafik dosyaları yüklemek için kullanılır. Loader sınıfı, DisplayObjectContainer sınıfının bir alt sınıfıdır. Loader nesnesi, görüntüleme listesinde (yüklediği SWF veya grafik dosyasını temsil eden görüntüleme nesnesi) yalnızca bir alt görüntüleme nesnesi içerebilir. Görüntüleme listesine bir Loader nesnesi eklediğinizde, şu kodda olduğu gibi, yüklenen alt görüntüleme nesnesini yüklemenin ardından görüntüleme listesine ekleyebilirsiniz:

var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
this.addChild(pictLdr);

SWF dosyası veya görüntü yüklendikten sonra, bu örnekteki container DisplayObjectContainer nesnesi gibi, yüklenen görüntüleme nesnesini başka bir görüntüleme nesnesi kabına da taşıyabilirsiniz:

import flash.display.*; 
import flash.net.URLRequest; 
import flash.events.Event; 
var container:Sprite = new Sprite(); 
addChild(container); 
var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);  
function imgLoaded(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

Yükleme ilerlemesini izleme

Dosya yüklenmeye başladıktan sonra, bir LoaderInfo nesnesi oluşturulur. LoaderInfo nesnesi, yükleme ilerlemesi, yükleyici ve yüklenenin URL'leri, medyanın toplam bayt sayısı ve medyanın nominal yüksekliği ve genişliği gibi bilgiler sağlar. LoaderInfo nesnesi, yükleme ilerlemesinin izlenmesine yönelik olaylar da gönderir.

Aşağıdaki diyagram, LoaderInfo nesnesinin farklı kullanımlarını gösterir—örneğin, bir Loader nesnesi için ve Loader nesnesi tarafından yüklenen nesne için SWF dosyasının ana sınıfı:

LoaderInfo nesnesine, hem Loader nesnesinin hem de yüklenen görüntüleme nesnesinin bir özelliği olarak erişilebilir. Yükleme başladığı anda, Loader nesnesinin contentLoaderInfo özelliği üzerinden LoaderInfo nesnesine erişilebilir. Görüntüleme nesnesinin yüklemesi sona erdiğinde, yüklenen görüntüleme nesnesinin bir özelliği olarak görüntüleme nesnesinin loaderInfo özelliği üzerinden de LoaderInfo nesnesine erişilebilir. Yüklenen görüntüleme nesnesinin loaderInfo özelliği, Loader nesnesinin contentLoaderInfo özelliği olarak aynı LoaderInfo nesnesini ifade eder. Başka bir deyişle, yüklenen bir nesne ile o nesneyi yükleyen Loader nesnesi arasında (yükleyen ile yüklenen arasında) LoaderInfo nesnesi paylaşılır.

Yüklenen içeriğin özelliklerine erişmek için, aşağıdaki kodda olduğu gibi, LoaderInfo özelliğine bir olay dinleyicisi eklemek istersiniz:

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
 
var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("Circle.swf"); 
ldr.load(urlReq); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
addChild(ldr); 
 
function loaded(event:Event):void 
{ 
    var content:Sprite = event.target.content; 
    content.scaleX = 2; 
}

Daha fazla bilgi için Olayları işleme bölümünü inceleyin.

Yükleme içeriği belirtme

Loader sınıfının load() veya loadBytes() yöntemi üzerinden Flash Player ya da AIR uygulamasına harici bir dosya yüklediğinizde, isteğe bağlı olarak bir context parametresi belirtebilirsiniz. Bu parametre bir LoaderContext nesnesidir.

LoaderContext sınıfı, yüklenen içeriğin kullanılabileceği bağlamı tanımlamanızı sağlayan üç özellik içerir:

  • checkPolicyFile: Yalnızca bir görüntü dosyası (SWF dosyası değil) yüklerken bu özelliği kullanın. Bu özelliği true değerine ayarlarsanız, Loader öğesi ilke dosyası için kaynak sunucuyu kontrol eder (bkz. Web sitesi denetimleri (ilke dosyaları)). Bu yalnızca Loader nesnesini içeren SWF dosyasının etki alanları dışındaki etki alanlarından ortaya çıkan içerik için gereklidir. Sunucu, Loader etki alanına izin verirse, Loader etki alanında bulunan SWF dosyalarındaki ActionScript, yüklenen görüntüdeki verilere erişebilir; başka bir deyişle, yüklenen görüntüdeki verilere erişmek için BitmapData.draw() komutunu kullanabilirsiniz.

    Loader nesnesinin etki alanı dışındaki etki alanlarında bulunan bir SWF dosyasının, belirli bir etki alanına izin vermek için Security.allowDomain() öğesini çağırabildiğini unutmayın.

  • securityDomain: Yalnızca bir SWF dosyası (görüntü değil) yüklerken bu özelliği kullanın. Loader nesnesini içeren dosyanın etki alanı dışındaki bir etki alanında bulunan SWF dosyası için bunu belirtin. Bu seçeneği belirttiğinizde, Flash Player, ilke dosyasının var olup olmadığını kontrol eder ve varsa, çapraz ilke dosyasında izin verilen etki alanlarında bulunan SWF dosyaları, yüklenen SWF içeriğinin çapraz komut dosyasını oluşturabilir. Bu parametre için flash.system.SecurityDomain.currentDomain belirtebilirsiniz.

  • applicationDomain: Yalnızca ActionScript 3.0'da yazılmış bir SWF dosyası (ActionScript 1.0 veya 2.0'da yazılmış bir görüntü ya da SWF dosyası değil) yüklenirken bu özelliği kullanın. Dosyayı yüklerken applicationDomain parametresini flash.system.ApplicationDomain.currentDomain öğesine ayarlayarak, dosyanın Loader nesnesinin etki alanıyla aynı uygulama etki alanında bulunacağını belirtebilirsiniz Yüklenen SWF dosyasını aynı uygulama etki alanına koyarak, doğrudan sınıflarına erişebilirsiniz. İlişkilendirilebilir sınıf adları üzerinden erişebileceğiniz, gömülü medya içeren bir SWF dosyası yüklüyorsanız bu kullanışlı olabilir. Ayrıntılı bilgi için bkz. Uygulama etki alanlarıyla çalışma.

Aşağıda, başka bir etki alanından bitmap yüklenirken ilke dosyasının denetlenmesine yönelik bir örnek yer almaktadır:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Aşağıda, dosyayı Loader nesnesiyle aynı güvenlik sanal alanına yerleştirmek için başka bir etki alanından SWF yüklenirken ilke dosyasının denetlenmesine yönelik bir örnek yer almaktadır. Ayrıca kod, yüklenen SWF dosyasındaki sınıfları, Loader nesnesinin etki alanıyla aynı uygulama etki alanına ekler:

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Daha fazla bilgi için Adobe Flash Platformu için ActionScript 3.0 Başvurusu'nda bulunan LoaderContext sınıfına bakın.