Paket | flash.system |
Sınıf | public final class ApplicationDomain |
Miras Alma | ApplicationDomain Object |
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Uygulama etki alanları, harici bir SWF dosyası Loader sınıfı aracılığıyla yüklendiğinde kullanılır. Yüklenen SWF dosyasındaki tüm ActionScript 3.0 tanımları, Loader nesnesinin load()
veya loadBytes()
yönteminin bir context
parametresi olarak ilettiğiniz LoaderContext nesnesinin applicationDomain
özelliği tarafından belirtilen uygulama etki alanında saklanır. LoaderInfo nesnesi ayrıca salt okunur olan bir applicationDomain
özelliği içerir.
Bir SWF dosyasındaki tüm kodlar, bir uygulama etki alanında var olacak şekilde tanımlanmıştır. Geçerli uygulama etki alanı, ana uygulamanızın çalıştığı yerdir. Sistem etki alanı, geçerli etki alanı da dahil olmak üzere tüm uygulama etki alanlarını içerir; bu, tüm Flash Player sınıflarını içerdiği anlamına gelir.
Sistem etki alanı haricindeki tüm uygulama etki alanları, ilişkili bir üst etki alanına sahiptir. Ana uygulamanızın uygulama etki alanının üst etki alanı, sistem etki alanıdır. Yüklenmiş sınıflar yalnızca üst öğeleri tarafından zaten tanımlanmamışsa tanımlanır. Yüklenmiş bir sınıf tanımını, yeni bir tanımla geçersiz kılamazsınız.
Uygulama etki alanlarına ilişkin kullanım örnekleri için, bkz. ActionScript 3.0 Geliştirici Kılavuzu.
ApplicationDomain()
yapıcı işlevi, bir ApplicationDomain oluşturmanıza olanak tanır.
İlgili API Öğeleri
flash.display.Loader.loadBytes()
flash.display.LoaderInfo
flash.net.URLRequest
flash.system.LoaderContext
Özellik | Tanımlayan: | ||
---|---|---|---|
constructor : Object
Belirli bir nesne örneği için sınıf nesnesine veya yapıcı işlevine bir başvuru. | Object | ||
currentDomain : ApplicationDomain [statik] [salt okunur]
Kodunuzun çalıştırıldığı, geçerli uygulama etki alanını alır. | ApplicationDomain | ||
domainMemory : ByteArray
Bu ApplicationDomain içinde etki alanı-global bellek işlemlerinin üzerinde çalışacağı nesneyi alır ve ayarlar. | ApplicationDomain | ||
MIN_DOMAIN_MEMORY_LENGTH : uint [statik] [salt okunur]
ApplicationDomain.domainMemory olarak kullanılması için gereken minimum bellek nesnesi uzunluğunu alır. | ApplicationDomain | ||
parentDomain : ApplicationDomain [salt okunur]
Bu uygulama etki alanının üst etki alanını alır. | ApplicationDomain |
Yöntem | Tanımlayan: | ||
---|---|---|---|
ApplicationDomain(parentDomain:ApplicationDomain = null)
Yeni bir uygulama etki alanı oluşturur. | ApplicationDomain | ||
Belirtilen uygulama etki alanından genel bir tanım alır. | ApplicationDomain | ||
Belirtilen uygulama etki alanından, genel tanımların tüm tam nitelikli adlarını alır. | ApplicationDomain | ||
Belirtilen uygulama etki alanında genel bir tanım olup olmadığını kontrol eder. | ApplicationDomain | ||
Bir nesnenin belirli bir özelliğinin tanımlı olup olmadığını gösterir. | Object | ||
Object sınıfının bir örneğinin parametre olarak belirtilen nesnenin prototip zincirinde olup olmadığını gösterir. | Object | ||
Belirtilen özelliğin bulunup bulunmadığını ve numaralandırılabilir olup olmadığını gösterir. | Object | ||
Dinamik bir özelliğin döngü işlemlerinde kullanılabilirliğini ayarlar. | Object | ||
Bu nesnenin, yerel ayara özel kurallara göre biçimlendirilmiş dize temsilini döndürür. | Object | ||
Belirtilen nesnenin dize olarak temsil edilen halini döndürür. | Object | ||
Belirtilen nesnenin temel değerini döndürür. | Object |
currentDomain | özellik |
currentDomain:ApplicationDomain
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Kodunuzun çalıştırıldığı, geçerli uygulama etki alanını alır.
Uygulama
public static function get currentDomain():ApplicationDomain
domainMemory | özellik |
domainMemory:ByteArray
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 10, AIR 1.5, Flash Lite 4 |
Bu ApplicationDomain içinde etki alanı-global bellek işlemlerinin üzerinde çalışacağı nesneyi alır ve ayarlar.
Uygulama
public function get domainMemory():ByteArray
public function set domainMemory(value:ByteArray):void
MIN_DOMAIN_MEMORY_LENGTH | özellik |
MIN_DOMAIN_MEMORY_LENGTH:uint
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 10, AIR 1.5, Flash Lite 4 |
ApplicationDomain.domainMemory olarak kullanılması için gereken minimum bellek nesnesi uzunluğunu alır.
Uygulama
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint
parentDomain | özellik |
parentDomain:ApplicationDomain
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Bu uygulama etki alanının üst etki alanını alır.
Uygulama
public function get parentDomain():ApplicationDomain
ApplicationDomain | () | Yapıcı |
public function ApplicationDomain(parentDomain:ApplicationDomain = null)
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Yeni bir uygulama etki alanı oluşturur.
ParametrelerparentDomain:ApplicationDomain (default = null ) — Hiçbir üst etki alanı içeri iletilmezse bu etki alanı, sistem etki alanını üst öğesi olarak alır.
|
getDefinition | () | yöntem |
public function getDefinition(name:String):Object
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Belirtilen uygulama etki alanından genel bir tanım alır. Tanım, bir sınıf adı, bir ad alanı veya bir işlev olabilir.
Parametreler
name:String — Yöntem adı.
|
Object — Tanımla ilişkili bir nesne yok.
|
Atar
ReferenceError — Belirtilen ada sahip genel tanım mevcut değil.
|
getQualifiedDefinitionNames | () | yöntem |
public function getQualifiedDefinitionNames():Vector.<String>
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11.3, AIR 3.3 |
Belirtilen uygulama etki alanından, genel tanımların tüm tam nitelikli adlarını alır. Tanım, bir sınıf adı, bir ad alanı veya bir işlev olabilir. Bu yöntemle döndürülen adlar, gerçek tanımın nesnesinin alınabilmesi için getDefinition()
yöntemine iletilebilir.
Döndürülen Vektör, String türündedir. Her bir String şu biçimdedir: package.path::definitionName
definitionName
üst düzey paketteyse, package.path::
atlanır.
Örneğin, aşağıdaki sınıf tanımında:
package my.Example { public class SampleClass extends Sprite { } }
Bu yöntem "my.Example::SampleClass" döndürür.
DöndürürVector.<String> — Tanımların adları olan, sıralanmamış bir Dizeler Vektörü. Tanım olmaması durumunda, boş bir Vektördür.<String> döndürülür.
|
Atar
SecurityError — Tanım, çağrı kodunun erişiminin olmadığı bir etki alanına ait.
|
hasDefinition | () | yöntem |
public function hasDefinition(name:String):Boolean
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Belirtilen uygulama etki alanında genel bir tanım olup olmadığını kontrol eder. Tanım, bir sınıf adı, bir ad alanı veya bir işlev olabilir.
Parametreler
name:String — Yöntem adı.
|
Boolean — Belirtilen tanım varsa true değeri, aksi takdirde false .
|
Notlar:
- ClassLoader sınıfı bir SWF dosyası yüklediğinden, yerel güvenliğin dosya sistemi düzeyinde olması gerekir.
- Bu örneği çalıştırmak için, ApplicationDomainExample.swf dosyasıyla aynı klasörde bulunan RuntimeClasses.swf adlı bir swf dosyasına sahip olmanız gerekir.
Şu koddan bir RuntimeClasses.swf dosyası oluşturarak başlayın:
package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }
Ardından, şu kodu ekleyin:
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.text.TextField; public class ApplicationDomainExample extends Sprite { private var loader:ClassLoader; private var tf:TextField = new TextField(); public function ApplicationDomainExample() { addChild(tf); loader = new ClassLoader(); loader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); loader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); loader.load("RuntimeClasses.swf"); } private function loadErrorHandler(e:Event):void { tf.text = "Load failed"; throw new IllegalOperationError("Cannot load the specified file."); } private function classLoadedHandler(e:Event):void { var runtimeClassRef:Class = loader.getClass("RuntimeClasses"); var greeter:Object = new runtimeClassRef(); tf.text = greeter.greet(); } } } import flash.display.Loader; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; class ClassLoader extends EventDispatcher { public static var CLASS_LOADED:String = "classLoaded"; public static var LOAD_ERROR:String = "loadError"; private var loader:Loader; private var swfLib:String; private var request:URLRequest; private var loadedClass:Class; public function ClassLoader() { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); } public function load(lib:String):void { swfLib = lib; request = new URLRequest(swfLib); var context:LoaderContext = new LoaderContext(); context.applicationDomain=ApplicationDomain.currentDomain; loader.load(request,context); } public function getClass(className:String):Class { try { return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + swfLib); } return null; } private function completeHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.CLASS_LOADED)); } private function ioErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } private function securityErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } }
ApplicationDomain.currentDomain
kullanma talimatı verilmiştir. Bu durumda, yeni bir ApplicationDomain
oluşturulur, böylece SWF'nin ikinci yüklediği Greeter
sınıfının özellikleri ve yöntemleri, ilk Greeter
sınıfının özelliklerini ve yöntemleriyle değiştirilmez. Bunu ClassLoader
öğesinin load
yöntemindeki context.applicationDomain
özelliğini değiştirerek test edebilirsiniz.
Notlar:
- ClassLoader sınıfı bir SWF dosyası yüklediğinden, yerel güvenliğin dosya sistemi düzeyinde olması gerekir.
- Bu örneği çalıştırmak için, sırasıyla bir "en" ve "es" klasöründe bulunan Greeter.swf adlı iki SWF dosyanızın olması gerekir.
Şu kodla, "en" dizininde bir Greeter.as dosyası oluşturun.
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }
Ardından, "es" dizininde çok benzer bir Greeter.as dosyası oluşturun:
package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }
Her ikisi için de SWF dosyaları derleyin ve aşağıdaki kodu ekleyin:
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class ApplicationDomainExample2 extends Sprite { private var spanishGreeterLoader:ClassLoader; private var englishGreeterLoader:ClassLoader; private var tf:TextField = new TextField(); private var greetersLoaded:uint = 0; public function ApplicationDomainExample2() { tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); spanishGreeterLoader = new ClassLoader(); spanishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); spanishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); spanishGreeterLoader.load("es/Greeter.swf"); englishGreeterLoader = new ClassLoader(); englishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); englishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); englishGreeterLoader.load("en/Greeter.swf"); } private function loadErrorHandler(e:Event):void { tf.text = "Load failed"; throw new IllegalOperationError("Cannot load the specified file."); } private function classLoadedHandler(e:Event):void { greetersLoaded++; if(greetersLoaded == 2) { greet(); } } private function greet():void { var spanishGreeter:Class = spanishGreeterLoader.getClass("Greeter"); var englishGreeter:Class = englishGreeterLoader.getClass("Greeter"); var greeter1 = new spanishGreeter(); var greeter2 = new englishGreeter(); tf.text = greeter1.greet() + "\n" + greeter2.greet(); } } } import flash.display.Loader; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; class ClassLoader extends EventDispatcher { public static var CLASS_LOADED:String = "classLoaded"; public static var LOAD_ERROR:String = "loadError"; private var loader:Loader; private var swfLib:String; private var request:URLRequest; private var loadedClass:Class; public function ClassLoader() { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); } public function load(lib:String):void { swfLib = lib; request = new URLRequest(swfLib); var context:LoaderContext = new LoaderContext(); // context.applicationDomain = ApplicationDomain.currentDomain; context.applicationDomain = new ApplicationDomain(); loader.load(request,context); } public function getClass(className:String):Class { try { return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + swfLib); } return null; } private function completeHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.CLASS_LOADED)); } private function ioErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } private function securityErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } }
Tue Jun 12 2018, 01:09 PM Z