2010-11-10 13 views
13

जब आप किसी अन्य में एक एसडब्ल्यूएफ लोड करते हैं, तो लोडर एसडब्ल्यूएफ ApplicationDomain.getDefinition(name:String) का उपयोग करके लोड किए गए एसडब्ल्यूएफ से विशिष्ट परिभाषाएं प्राप्त कर सकता है। उदाहरण के लिए:एक लोड किए गए एसडब्ल्यूएफ के आवेदन डोमेन में सभी परिभाषाएं कैसे प्राप्त करें?

package 
{ 
    // ... imports 

    public class SWFLoader extends Sprite 
    { 
     private var loadedAppDomain:ApplicationDomain; 

     public function SWFLoader() 
     { 
      var request:URLRequest = new URLRequest("test.swf"); 
      var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onTestLoadComplete); 
      loader.load(request); 
     } 

     private function onTestLoadComplete(event:Event):void 
     { 
      var loaderInfo:LoaderInfo = LoaderInfo(event.target); 
      loadedAppDomain = loaderInfo.applicationDomain; 

      // Here we can get ANY defined symbol (class, namespace or function according to Adobe Flash help) 
      var someSymbolClass:Class = Class(loadedAppDomain.getDefinition("SomeSymbol")); 
      var someSymbolSprite:Sprite = Sprite(new someSymbolClass()); 

      addChild(sprite); 
     } 
    } 
} 

कैसे मैं एक स्पष्ट रूप से निर्दिष्ट किए बिना एक SWF में परिभाषाओं के सभी प्राप्त कर सकते हैं?

उत्तर

14

फ़्लैश प्लेयर 11.3 के रूप में, आप ApplicationDomain.getQualifiedDefinitionNames() का उपयोग कर सकते हैं।

the official documentation for the method और this blog post about the Flash Player release देखें।

+0

सुंदर। आखिरकार एडोब ने इस कार्यक्षमता को जोड़ा :) –

+0

3/31/2014 तक, विधि वास्तव में दस्तावेज़ीकृत नहीं है। ApplicationDomain के प्रलेखन लिंक पर 'getQualifiedDefinitionNames' का कोई उल्लेख नहीं है। विधि, हालांकि, काम करता है, और यह एक 'वेक्टर लौटाता है। उस विशेष एप्लिकेशनडोमेन में परिभाषित कक्षाओं के '। यह भी ध्यान रखें कि यह मूल डोमेन की परिभाषाओं को वापस नहीं करता है, भले ही GetDefinition/hasDefinition मूल डोमेन में परिभाषित कक्षाओं के लिए सच हो जाए। – Triynko

+1

यह वहां प्रलेखित है लेकिन इसे देखने के लिए आपको प्लेयर संस्करण को 11.3 या उससे ऊपर सेट करने की आवश्यकता है। पेज शीर्षक के नीचे शीर्ष पर। फ़िल्टर करने के लिए मुझे पेश करने के लिए –

0

आपको वर्तमान एप्लिकेशनडोमेन में लोड किए गए एसडब्ल्यूएफ को रखना होगा।

ContextLoader जानकारी पर ऐसा करने के लिए ApplicationDomain.currentDomain का उपयोग करें।

loader.load(request, new ContextLoader(false, ApplicationDomain.currentDomain)); 

यह काम करना चाहिए।

+0

और फिर क्या? मेरे पास लोड किए गए एसडब्ल्यूएफ के सभी वर्गों, नामस्थानों और कार्यों तक पहुंच है? क्या मैं दौड़ सकता हूं: 'var someSymbolSprite: स्प्राइट = स्प्राइट (नया कुछ सिंबल()) '? –

+0

हां, आप लोड किए गए एसएफएफ में हर प्रतीक का उपयोग कर सकते हैं, जैसे कि उन्हें वर्तमान फिल्म में घोषित किया गया था। – blue112

10

संपादित करें: यह आपकी समस्या का सबसे तेज समाधान है: http://www.bytearray.org/?p=175

हाय, तो आप इस पुस्तकालय इस्तेमाल कर सकते हैं: https://github.com/claus/as3swf/wiki/ समय गहरी परीक्षण करने की जरूरत नहीं है, लेकिन यहाँ मुझे क्या मिला है:

1 - मैं एक .swf पुस्तकालय 2 निर्यात एम सी, $ टेस्ट और में युक्त बनाया है $ Test2 2 - एक बार जब .swf एक लोडर द्वारा लोड, मैं इस कोड चलाएँ:

var swf : SWF = new SWF(loader.contentLoaderInfo.bytes); 
trace(swf); 

3 - उत्पादन में आप शोध करे पर ध्यान देंगे लाइनों:

[76:SymbolClass] 
    Symbols: 
    [0] TagID: 2, Name: $Test2 
    [1] TagID: 1, Name: $Test 

मुझे लगता है कि पुस्तकालय एपीआई

+0

बढ़िया, मैं SWFExplorer धन्यवाद का उपयोग करूंगा! –

-1

जवाब मैं पिछले एक से प्राप्त से बाद के माध्यम से सीधे यह जानकारी प्राप्त करने के लिए एक तरह से है कि वहाँ मैं यहाँ से पूछा कुछ दिन पहले (यह SWC के बारे में है, लेकिन आपके मामले में, यह वास्तव में एक फर्क नहीं करता है)
Working with SWCs - getDefinitionByName issue

प्रश्न दोनों SWFs ही ApplicationDomain का हिस्सा हैं, तो आप लोड का उपयोग करने के लिए सक्षम होना चाहिए एसडब्ल्यूएफ कक्षाएं सीधे ऐसा करके:

//provided that SomeSymbol extends Sprite... 
var someSymbolSprite:Sprite =new SomeSymbol(); 

दूसरी ओर, आप इस

var SomeSymbol:Class = getDefinitionByName("SomeSymbol"); 

ऐसा करने में सक्षम हैं जब तक आप भरी हुई SWF

var ssym:SomeSymbol; 

से वस्तुओं की एक पुस्तकालय बनाने के ऊपर के लिंक की जाँच करें नहीं होगा अधिक जानकारी के लिए।

+0

लेकिन यह वही उदाहरण है, मुझे यह जानना है कि प्रतीक 'SomeSymbol' मौजूद है।मैं हर किसी को हार्डकोड किए बिना सभी प्रतीकों की एक सूची चाहता हूं। –

संबंधित मुद्दे