2010-10-20 1 views
1

При попытке загрузить SWF из домена, отличного от домена моего Swf, я получаю эту ошибку:Доступ к SWF из другого домена

* Security Sandbox Нарушение * файла SecurityDomain»: /// C:/Документы и Настройки/Добро пожаловать/Мои документы/Flex Builder 3/SwfLoad/бен-отлаживать/SwfLoad.swf»пытались получить доступ к Несовместимой Context

'http://mydomain.com/crossdomain.xml' 

загрузки класса не удался. имя класса MGMITileInsideZ1 ошибка сбоя: SecurityError:
Ошибка # 2119: нарушение безопасности песочницы: файл вызывающего абонента: /// C:/Documents and Settings/Welcome/Мои документы/Flex Builder 3/SwfLoad/bin-debug/SwfLoad.swf
не может получить доступ к LoaderInfo.applicationDomain, принадлежащему http://mydomain.com/zoom_assets/GroundTiles.swf.

Вот мой crossdomain.xml:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
<site-control permitted-cross-domain-policies="all"/> 
<allow-access-from domain="*" to-ports="*" secure="false"/> 
<allow-http-request-headers-from domain="*" headers="*" secure="false"/> 

Вот мой код ActionScript:

package { 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.system.ApplicationDomain; 
    import flash.system.LoaderContext; 
    import flash.system.Security; 

    public class SwfLoad extends Sprite 
    { 
     public function SwfLoad() 
     { 
      Security.loadPolicyFile("http://mydomain.com/crossdomain.xml"); 
      var loader:Loader = new Loader(); 
      var url:String = "http://mydomain.com/zoom_assets/GroundTiles.swf"; 
      var request:URLRequest = new URLRequest(url); 
      var context:LoaderContext = new LoaderContext(); 
      context.checkPolicyFile = true; 
      context.applicationDomain = ApplicationDomain.currentDomain; 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
        function(e:Event):void { 
         try { 
          var className:String = "MGroundTileInsideZ1"; 
          var appDomain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; 
          var cl:Class = appDomain.getDefinition(className) as Class; 
          //var cl:Class = getDefinitionByName(className) as Class; 
         } 
         catch (e:Error) { 
          trace("loading of class failed. class name is " + className + " failure error is " + e); 
         } 
        }); 
      loader.load(request,context); 
     } 
    } 
} 
+0

Я просто проверял с Flash Builder 4, SDK 4.1 и Flash Player 10.1, и он работает. –

+0

Я работаю с Flex Builder 3, SDK 3.0 и Flash Player 10.1, но это не работает. Он работал только после этого: context.securityDomain = SecurityDomain.currentDomain; – dharm0us

ответ

1
context.securityDomain = SecurityDomain.currentDomain; 

я должен был включать эту строку тоже ...

И в самом деле, я мог бы покончить с:

Security.loadPolicyFile("http://mydomain.com/crossdomain.xml"); 

и

context.checkPolicyFile = true; 
0

Попробуйте выполнить ваш SWF с локального веб-сервера, а не из файловой системы. В Flash Builder перейдите к свойствам вашего проекта и выберите Flex Build Path. Измените папку «Выход» и «Выходная папка» в соответствии с корнем документа вашего веб-сервера и соответствующим URL-адресом.

Если вам по-прежнему необходимо запустить SWF из локальной файловой системы, попробуйте настроить Flash Player's security settings и добавить локальный каталог к ​​доверенным.

+0

Я бегу с локального веб-сервера уже ... – dharm0us