2010-04-26 12 views
5

संपादित करें: उत्तर के कारण मैं पोस्ट कोड बदलता हूं। मैंनेSecurity.allowDomain("*")लाइन जोड़ा है और वह पंक्ति मुझे एक त्रुटि फेंकता है। तो, यह कैसे बनाया जा सकता है?फ्लेक्स एप्लिकेशन के अंदर बाहरी एसडब्ल्यूएफ कैसे चलाएं?

मैं एक फ्लेक्स एप्लिकेशन में एक एक्शन स्क्रिप्ट 3.0 एप्लिकेशन चलाने के लिए चाहता हूं। इस मेरे द्वारा की गई ऐसा करने के लिए निम्नलिखित:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication windowComplete="loadSwfApplication()" xmlns:mx="http://www.adobe.com/2006/mxml"> 

    <mx:Script> 
     <![CDATA[ 
      private function loadSwfApplication() 
      { 
       // The next line throws me an error. 
       Security.allowDomain("*"); 

       var urlRequest:URLRequest = new URLRequest("path/to/the/application.swf"); 
       swfLoader.addEventListener(Event.COMPLETE, loadComplete); 
       swfLoader.load(urlRequest); 
      } 

      private function loadComplete(completeEvent:Event) 
      { 
       var swfApplication:* = completeEvent.target.content; 
       swfApplication.init(); // this is a Function that I made it in the Root class of swfApplication 
      } 
     ]]> 
    </mx:Script> 

    <mx:SWFLoader id="sfwLoader"/> 

</mx:WindowedApplication> 

समस्या swfApplication.init(); आकाशवाणी प्लेयर के फोन करने में मुझे एक अपवाद फेंकता है जो:

सुरक्षा सैंडबॉक्स उल्लंघन: फोन करने वाले file: /// पथ /to/the/application.swf ऐप द्वारा स्वामित्व वाले चरण तक नहीं पहुंच सकता: /SWFApplicationLoader.swf।

इसका कारण यह है application.swf में कहीं मैं इस तरह मंच का उपयोग करें:

if (root.stage != null) 
    root.stage.addEventListener(Event.REMOVED, someFunction); 
root.stage.stageFocusRect = false; 

मैं इस swf आवेदन कैसे लोड और बिना किसी समस्या के मंच का उपयोग कर सकते हैं?

उत्तर

18

आप अपने SWF को अस्थायी रूप से ByteArray में लोड करने का प्रयास कर सकते हैं और फिर इसे अपने SWFLoader से लोड कर सकते हैं।

अपने एसडब्ल्यूएफ के अंदर कोड के रूप में allowLoadBytesCodeExecution को सत्य में सेट करना न भूलें।

बेशक यह सुनिश्चित करें कि आपका लोड किया हुआ SWF आपके एप्लिकेशन के लिए पर्याप्त सुरक्षित है क्योंकि इसकी आपकी सभी संपत्तियों तक पहुंच होगी।

private function loadSwfApplication():void { 
    // load the file with URLLoader into a bytearray 
    var loader:URLLoader=new URLLoader(); 

    // binary format since it a SWF 
    loader.dataFormat=URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, onSWFLoaded); 

    //load the file 
    loader.load(new URLRequest("path/to/the/application.swf")); 
} 
private function onSWFLoaded(e:Event):void { 
// remove the event 
var loader:URLLoader=URLLoader(e.target); 
loader.removeEventListener(Event.COMPLETE, onSWFLoaded); 

// add an Application context and allow bytecode execution 
var context:LoaderContext=new LoaderContext(); 
context.allowLoadBytesCodeExecution=true; 

// set the new context on SWFLoader 
sfwLoader.loaderContext = context; 

sfwLoader.addEventListener(Event.COMPLETE, loadComplete); 

// load the data from the bytearray 
sfwLoader.load(loader.data); 
} 

// your load complete function 
private function loadComplete(completeEvent:Event):void { 
var swfApplication:* = completeEvent.target.content; 
swfApplication.init(); // this is a Function that I made it in the Root 
         // class of swfApplication 
} 
+0

क्या यह मोबाइल प्लेटफ़ॉर्म पर भी काम करता है? यदि हां, तो आप आईओएस के लिए एक फ्लैश प्लेयर लिख सकते हैं। – sydd

+0

कोई विचार क्यों यह बाइट सरणी के साथ काम करता है लेकिन swfloader घटक नहीं? – buddyp450

2

वे अलग-अलग डोमेन यदि आप एक सुरक्षा अपवाद जोड़ने के लिए जा रहे हैं से लोड किया जा रहा है - http://livedocs.adobe.com/flex/3/html/help.html?content=05B_Security_08.html

अगर इसकी स्थानीय स्तर पर आप शायद उन्हें पर भरोसा फ़ाइल या फ़ोल्डर का सूची में जोड़ने के लिए है करने के लिए जा चलाया जा रहा - सेटिंग्स प्रबंधक http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

+0

मैं करने का प्रयास करते सुरक्षा अपवाद जोड़ें यह मुझे एक त्रुटि फेंकता है: 'सुरक्षा त्रुटि: त्रुटि # 3207: एप्लिकेशन-सैंडबॉक्स सामग्री इस सुविधा तक नहीं पहुंच सकती है। \t फ़्लैश.system :: सुरक्षा $/allowDomain() ' –

+0

और यह सेटिंग प्रबंधक में विश्वसनीय फ़ाइलों में पहले ही जोड़ा जा चुका है। –

1

यह मानते हुए कि बाहरी SWF आवेदन निर्देशिका में भी है, तो आप app:/ योजना का उपयोग कर यह लोड करने का प्रयास कर सकते हैं:

var urlRequest:URLRequest = new URLRequest("app:/path/application.swf"); 

कि हो सकता है इसे मुख्य एप्लिकेशन के रूप में एक ही सुरक्षा संदर्भ में डाल दें।

0

एक बात आप विचार कर सकते हैं कि अगर आप आकाशवाणी में आपके आवेदन निर्देशिका के अंदर से एक SWF चलाने के लिए कोशिश कर रहे हैं, आकाशवाणी फाइलों के निष्पादन को प्रतिबंधित करता है। यदि आप फ़ाइल को एक temp फ़ाइल में कॉपी करते हैं और इसे चलाते हैं (allowLoadBytesCodeExecution के साथ true पर सेट) तो यह काम करता है।

var file:File = File.applicationDirectory.resolvePath("myFile.swf"); 
this.tmpFile = File.createTempDirectory().resolvePath("myFile.swf"); 
file.copyTo(this.tmpFile); 

imagePreview.loaderContext = lc; 
imagePreview.source = tmpFile.url; 
0

यह फ्लेक्स प्रोजेक्टर के लिए काम नहीं करेगा।

केवल हम SWFLoader और LocalConnection का उपयोग करते हैं क्योंकि वे बाह्य swf और main swf के बीच संवाद कर सकते हैं। समर्थन के लिए धन्यवाद!

आप से Adobe's Forum

मेरी ट्यूटोरियल पढ़ सकते हैं यह मूवीक्लिप या वस्तु-कॉलर्स की तुलना में बहुत बेहतर है

का समाधान समाधान :)

सादर के लिए

धन्यवाद, जेन्स