Wie funktioniert die domänenübergreifende Kommunikation zwischen JavaScript und Flash?

8

Wie öffne ich die 'domänenübergreifende Sicherheit', damit das JavaScript auf der Seite frei mit der SWF kommunizieren kann, auch wenn diese auf einer anderen Domain gehostet wird?

Ich bin mir sicher, dass diese Funktionskommunikation standardmäßig blockiert ist, aber indem ich mit einer Datei namens "crossdomain.xml" und der ActionScript-3-Funktion "system.Security.allowDomain (" * ") herumspiele. Ich habe jedoch keinen vollen Erfolg, und ich habe keine Einsicht, um zu wissen, für was man sich öffnet.

Gibt es andere versteckte Sicherheitsebenen, an die ich in diesem Szenario denken muss?

Und öffne ich meinen Code für potentielle Hacker irgendwie, indem ich dieses Setup mache?

(und falls Sie sich fragen: Ja, ich habe ), damit dies in einem Szenario funktioniert, in dem der HTML-Code in einer Domäne gehostet wird, wird das JavaScript extern aus einer anderen Domäne hinzugefügt SWF ist eingebettet in das JavaScript einer dritten Domäne - frag nicht warum, es ist zu kompliziert zu erklären - ich wünschte auch, ich könnte das Ganze in einer Domäne hosten).

    
Christian Hollbaum 16.01.2009, 23:30
quelle

2 Antworten

17

Wenn Sie Security.allowDomain("www.example.com") in der SWF-Datei verwenden, kann JS auf einer Seite von www.example.com Funktionen aufrufen, die in der SWF-Datei mit ExternalInterface.addCallback() angezeigt werden. Die Domäne und Subdomäne müssen genau übereinstimmen. Wenn Sie "*" verwenden, kann jede Domäne mit der SWF kommunizieren. Wenn Sie jedoch eine bestimmte Domäne haben, ist es besser, diese zu verwenden.

Wenn Sie allowScriptAccess auf always im HTML-Einbettungscode setzen, kann die SWF JavaScript-Funktionen aufrufen.

Eine Sache, die viele Entwickler auffängt, ist, dass JavaScript keine Funktionen in der SWF aufrufen kann, bis die SWF geladen ist. Leider gibt es kein JS-basiertes Ereignis, das Ihnen sagt, wann die SWF bereit ist (zumindest, dass ich gefunden habe). Um dieses Problem zu umgehen, rufen Sie normalerweise sofort nach dem Laden der SWF-Datei eine JS-Funktion aus der SWF-Datei auf, um die SWF-Seite zu benachrichtigen.

Es gibt ein paar Abstraktionen hier und da, aber wenn Sie sich den Quellcode für YUI-Diagramme ansehen, dann sehen Sie sich das an könnte herausfinden, wie Yahoo! hat die crossdomain JS / SWF-Kommunikation funktioniert.

    
joshtynjala 16.01.2009, 23:53
quelle
1

Eine Sache, die ich der vorherigen Antwort hinzufügen würde: Wenn Sie den obigen Code versuchen und es nicht funktioniert, überprüfen Sie, ob die Adresse Ihrer Website das "www" enthält oder nicht. Meins hat nicht und hat nicht funktioniert, wenn ich es als

schrieb %Vor%

Ich musste es schreiben als:

%Vor%     
Jeremy Knight 29.06.2012 22:50
quelle