[FLA/AS3] Remote SWF inladen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Ik heb in Flash (CS4 met ActionScript 3.0) een animatie ontwikkeld waarin ik een externe swf bestand wil inladen. Om dit te realiseren heb ik een class geschreven die in de root wordt ingeladen. De class opent een .xml bestand vanaf een bepaald domein (bijvoorbeeld http://www.mijnsite.nl/remotefile.xml). Wanneer deze is geladen worden enkele elementen doorlopen. Afhankelijk van de systeem taal wordt een remote swf bestand ingeladen, waarvan de url wordt gedefinieerd in de xml. Het geladen swf wordt in de huidige animatie geplaatst.

Bij het testen van de Movie werkt het allemaal goed. Ook wanneer ik de bestanden (de twee swf bestanden) upload naar dezelfde webserver werkt het goed. Mijn probleem begint wanneer ik de twee swf bestanden op verschillende webservers plaats. Als ik bijvoorbeeld de core animatie op webserver1 zet, en de overige (via AS3 in te laden) swf bestanden + de xml bestand op webserver2 dan werkt het niet.
Ik weet dat flash uit veiligheid het niet toestaat op tussen verschillende (sub)domeinen te communiceren. Om de xml in te laden heb ik de crossdomain.xml al op de webserver geplaatst waar de in te laden xml bestand ook staat. Dit werkt, dus het lijkt mij niet het probleem. Ook heb ik gelezen dat er met Security.AllowDomain() het inladen vanaf een externe domein kan worden aangezet. Dit heb ik geprobeerd, maar het werkte niet. Misschien deed ik hierbij iets fout? Ik heb de functie in de eerste frame van de timeline geprobeerd, maar ook in de init functie van de class.

Is er iets wat ik over het hoofd zie? Als het nodig is kan ik wat code plaatsen, maar dit lijkt me nu (nog) niet nodig omdat het op dezelfde server wel werkt ;)

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

En wat werkte er precies niet? Welke fout krijg je?
Installeer eerst de flash debug player, zodat je de runtime errors te zien krijgt.
(http://www.adobe.com/support/flashplayer/downloads.html)

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Ik wil vanaf een (voor publiek toegankelijke) website (bijvoorbeeld www.mijnwebsite.nl) een flash bestand aanroepen die op een ander domein staat (bijvoorbeeld media.fileserver.com/mijnbestand.swf). Dit is niet zo moeilijk en werkt.
Maar in die swf wordt weer via AS3 een tweede swf ingeladen (dit is afhankelijk van systeemtaal instellingen). Dit gaat niet goed.

Ik heb de Flash debug player geïnstalleerd. Deze kende ik nog niet, dit scheelt dus al een hoop :+

De volgende melding krijg ik:
SecurityError: Error #2060: Schending van beveiligingssandbox: aanroeper ExternalInterface http://media.fileserver.com/mijnbestand.swf heeft geen toegang tot http://www.mijnwebsite.nl.
ps: op http://media.fileserver.com/mijnbestand.swf staat in de root een crossdomain.xml.

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 12:36
Nee, wegens veiligheids redenen kan je SWF niet zomaar bestanden inladen van externe webservers. Om dit te omzeilen zul je een CrossDomain.xml file moeten zetten op alle webservers.

Meer info: http://kb2.adobe.com/cps/142/tn_14213.html

//edit
De PS van je post niet gelezen. Klopt je crossdomain file wel? Post die eens. :-)

[ Voor 16% gewijzigd door WernerL op 11-10-2010 15:38 ]

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Inhoud crossdomain.xml:
code:
1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>


Verder heb ik op de eerste keyframe van mijn movie de AllowDomain toegevoegd, maar dit hielp niet.
code:
1
2
flash.system.Security.allowDomain("*");
flash.system.Security.allowInsecureDomain("*");


In de class heb ik ook de AllowDomain (op verschillende plaatsen) toegevoegd, maar weer Error #2060.
code:
1
2
3
4
5
6
7
8
9
10
11
import flash.system.Security;
import flash.system.SecurityDomain;

public class TestClass extends MovieClip {
        Security.allowDomain("*");
        Security.allowInsecureDomain("*");
        public function TestClass(){
            Security.allowDomain("*");
            Security.allowInsecureDomain("*");
        }
}


Ook heb ik in mijn class een private var context aangemaakt. Bij de class init heb ik checkPolicyFile op true ge-set. Deze context kan ik alleen niet meegeven bij de xml loader omdat URLLoader() maar een parameter (url naar mijn xml bestand) toestaat.
code:
1
2
3
private var context:LoaderContext = new LoaderContext();
...
context.checkPolicyFile = true;

[ Voor 4% gewijzigd door X-trace op 13-10-2010 11:15 ]

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

SecurityError: Error #2060: Schending van beveiligingssandbox: aanroeper ExternalInterface http://media.fileserver.com/mijnbestand.swf heeft geen toegang tot http://www.mijnwebsite.nl.
ps: op http://media.fileserver.com/mijnbestand.swf staat in de root een crossdomain.xml
1. Aan de foutmelding te zien mis je juist een crossdomain op http://www.mijnwebsite.nl
2. Ik weet niet of externalinterface ook crossdomain werkt. Mogelijk moet je eerst met localconnection of intern (afhankelijk van hoe je je swf inlaadt) communiceren met de hoofd swf en die de Externalnterface laten afhandelen.

Raar... Is zo gek nog niet

Pagina: 1