In meiner Flex-App brauche ich ein Javascript-Steuerelement, um eine meiner Actionscript-Methoden aufzurufen. Einfach genug, nach dem Flex/Actionscript-Dokumentation, schrieb ich in meinem Actionscript-Code:Actionscript's ExternalInterface.addCallback funktioniert nur lokal, nicht in Produktion
if (ExternalInterface.available)
ExternalInterface.addCallback("setName", setNameInActiveWindow);
In der Javascript Kontrolle Ich schrieb:
document.getElementById('FlexAppId').setName(name);
Arbeiten groß. Genau wie erwartet, ging ich in die Produktion. Aber es funktioniert nicht in der Produktion :(. Genaue Code ... Ich kann es nicht herausfinden. Der obige Javascript-Code wird ausgeführt, aber der Rückruf wird nicht im Actionscript-Code ausgeführt.
Hat dies Ich benutze local.mydomain.com:8080, wo local.mydomain.com zu 127.0.0.1 aufgelöst wird (ich muss dies tun, damit einige Widgets ordnungsgemäß funktionieren.) Und die Flex-App kommt von der gleiche lokale Webserver.In der Produktion jedoch ist es nur www.mydomain.com (mydomain.com ist nicht der echte Domain-Name) und die Flex-App kommt von flash.mydomain.com (ein CDN).
Ich habe eine crossdomain.xml-Datei unter www.mydomain.com:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.mydomain.com"/>
</cross-domain-policy>
UPDATE: Ich habe versucht, die lokale Umgebung zu ändern, so dass der Flex-App von flash.mydomain.com Bezug genommen wird, ebenso wie in der Produktion. Es stellt sich heraus, dass ich das gleiche Problem auch lokal bekomme ... also scheint es sich um eine Art Domain-Sicherheitsproblem zu handeln, trotz der crossdomain.xml-Datei, die ich oben habe. Muss ich etwas in meiner crossdomain.xml ändern? Gibt es etwas Zusätzliches, das ich brauche, um ExternalInterface.addCallback
zu arbeiten?
UPDATE 2: Verstanden zu arbeiten! Ich musste sowohl Security.allowDomain("*")
als auch tun. Bei der Einstellung flash.mydomain.com wurde das Problem NICHT behoben, ich musste einen Platzhalter setzen. allowNetworking
hatte keine Wirkung. Ich brauche allowScriptAccess="always"
, aber ich hatte das von vorher. Das Aufrufen von Javascript mit ExternalInterface.call
funktioniert einfach mit diesem Parameter. Aber das Hinzufügen eines Rückrufs mit ExternalInterface.addCallback
erfordert die obigen Sicherheitsmethoden mit einem Platzhalter.
crossdomain.xml sollte keine Rolle spielen. ist dein html auch auf dem Server oder ist das html lokal und ein swf remote laden? – greggreg
lokal, die HTML und Flash beide kommen aus local.mydomain.com:8080. Remote kommt das HTML von www.mydomain.com und Flash kommt von flash.mydomain.com. Wenn ich den Flash-Speicherort lokal auf flash.mydomain.com ändere, bekomme ich das gleiche Problem, Callbacks funktionieren nicht mehr. –
Welchen Wert hat der allowScriptAccess-Parameter in der umgebenden HTML, die Ihre Flex-App einbettet? –