2009-01-16 13 views
8

Wie öffne ich die "domänenübergreifende Sicherheit", damit das JavaScript auf der Seite frei mit der SWF kommunizieren kann, selbst wenn diese auf einer anderen Domain gehostet wird?Wie funktioniert die domänenübergreifende Kommunikation zwischen JavaScript und Flash?

Ich weiß sicher, dass diese Funktion der Kommunikation standardmäßig blockiert wird, sondern indem sie mit einer Datei namens „crossdomain.xml“ herumgespielt und die Actionscript-3-Funktion: System.security.allowDomain („*“). Ich habe jedoch keinen vollen Erfolg, und ich habe nicht die Einsicht, um zu wissen, wofür man sich öffnet.

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

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

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

Antwort

17

Mithilfe von Security.allowDomain("www.example.com") in der SWF-Datei 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.

Die Einstellung allowScriptAccess auf always im HTML-Einbettungscode ermöglicht es der SWF, JavaScript-Funktionen aufzurufen.

Eine Sache, die viele Entwickler auffängt, ist, dass JavaScript nicht in der Lage ist, Funktionen auf der SWF aufzurufen, 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 Seite zu benachrichtigen, für die die SWF-Datei bereit ist.

Es gibt einige Abstraktion hier und da, aber wenn Sie sich den Quellcode für YUI Charts ansehen, können Sie vielleicht herausfinden, wie Yahoo! hat crossdomain JS/SWF Kommunikation funktioniert.

+0

ich gesucht habe, was wie Stunden scheint, und dies ist bei weitem der beste Erklärung, die ich gefunden habe. Danke für die Erklärung mit Klarheit! – zombat

+0

Vielen Dank – simo

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. Mine nicht und hat nicht funktioniert, wenn ich es als

schreibe
Security.allowDomain("www.jeremy-knight.com"); 

ich es schreiben benötigt wie:

Security.allowDomain("jeremy-knight.com"); 
+1

Warum nicht beide hinzufügen? – simo

+0

Guter Punkt, danke macht Sinn. –

Verwandte Themen