2009-03-13 4 views
0

Ich habe seit ein paar Stunden mit einem Problem zu kämpfen, und ich würde entweder Hilfe bei der Erreichung meines Ziels oder Bestätigung, dass was ich versuche zu tun ist in der Tat unmöglich .Gewählten Text mit Cross-Frame-Scripting

Ich habe eine Webanwendung, die den ausgewählten Text (document.getSelection()) als Eingabe von einer beliebigen Webseite nimmt. Es wäre zwar möglich, ein Bookmarklet für ein solches Scripting zu verwenden, aber es ist am besten für den Endbenutzer, wenn ich dies mit einem Iframe erreichen kann.

Der Mutterrahmen ist meine Seite mit diesem Skript:

$('#frame').load(function() 
{ 
    // this event won't be triggered 
    $(window).mouseup(function(){ 
     doStuff(window.getSelection()); 
    }); 

    // this will throw a security error 
    $(window.frames[0].document).mouseup(function(){ 
     doStuff(window.frames[0].document.getSelection()); 
    });     
}); 

eine beliebige Stelle im untergeordneten Frame. Wenn das untergeordnete Dokument nicht von meiner Domäne stammt, ist der Zugriff aus Sicherheitsgründen von XSS verboten. Ich habe verschiedene Varianten und versuchte Hacks ausprobiert, einschließlich des Setzens des iframes src auf meine Domain mit der Third-Party-URL als Argument und Weiterleitung auf die URL des Drittanbieters. In gewissem Sinne bin ich froh, dass es nicht funktioniert hat (denn wenn das der Fall wäre, hätte die XSS-Sicherheit noch einen langen Weg vor sich ...)

Eine weitere Option wäre das Herunterladen der Third-Party-Seite und Serving es ist von meiner Domain wie ein Proxy-Server, aber ich habe schon eine Reihe von Problemen mit relativen Pfaden zu Dateien, die manchmal leicht zu absolut, aber manchmal ein Narrsbotschaft (wie wenn die Dateien per Skript zugegriffen werden) sind .

Ich habe festgestellt, dass ich vielleicht nur Pech habe. Vielleicht eine wichtige Unterscheidung für meinen Fall ist, dass ich nur auf die .getSelection() Methode für das Kind zugreifen möchte. Sie müssen nicht auf Cookies oder Tastenanschläge zugreifen oder mit dem DOM interagieren können. Vielleicht macht es keinen Unterschied, aber vielleicht tut es das auch.

Antwort

0

Sie könnten versuchen, die Proxy-Methode, sondern fügen Sie ein base-Tag, das auf die ursprüngliche Domäne verweist. Die Pfade sollten dann gepflegt werden.

Ich würde mich nicht auf irgendwelche XSS-Hacks verlassen, selbst wenn Sie sie finden könnten - sie würden wahrscheinlich korrigiert werden und höchstwahrscheinlich nicht Crossbrowser.

0

Eine Möglichkeit besteht darin, das Dokument eines iframes mit Text aus einem XHR zu schreiben oder die load() Funktion von jQuery zu verwenden, dies funktioniert jedoch nur, wenn es im iframe keine Navigation gibt.

0

Ich habe Ihre Antwort nicht vollständig gelesen :-) aber vielleicht habe ich eine Lösung, es beinhaltet die Weitergabe von Daten zwischen Eltern- und Kind-Frames, beide Wege.

Sie können SCHREIBEN (und nicht READ) den Hash (Hash ist die http://url#HASH_PART) von Parent von Kind. Also, auf dem Eltern Iframe, nur Intervall festlegen, um den Wert zu überprüfen, sagen alle 50ms.

function checkHash() { 
    if (window.location.hash == "#something") { 
     // my child frame set this value using: 
     //parent.window.location.hash = "something"; 
     doSomething(); 
    } 
} 

Für weitere Details und vielleicht Eltern Kommunikation Kind tut, dann die ganzen Artikel dieser Erklärung (auch Demo-Link hat) können here gefunden werden.