2009-08-01 16 views
0

Diese Frage ist eine genauere Beschreibung des Problems, das ich auf dieser thread fragte. Grundsätzlich habe ich eine Webanwendung, für die ich versuche, die OAuth-Funktionalität von Twitter zu verwenden. Diese Anwendung verfügt über einen Link, der einen Benutzer zur Eingabe seiner Twitter-Anmeldeinformationen auffordert. Wenn ein Benutzer auf diesen Link klickt, wird ein neues Fenster über JavaScript geöffnet. Dieses Fenster dient als Dialog. Wenn ein Benutzer auf den Link klickt, wird er im Dialogfeld auf die Website von Twitter weitergeleitet. Auf der Twitter-Seite hat der Benutzer die Möglichkeit, seine Twitter-Zugangsdaten einzugeben. Wenn sie ihre Anmeldeinformationen angegeben haben, werden sie im Dialogfeld auf eine Seite auf meiner Website weitergeleitet. Dies wird durch eine Callback-URL erreicht, die für Anwendungen auf der Twitter-Site eingerichtet werden kann.JavaScript - window.location - Erlaubnis verweigert - Cross Site Scripting

Alles, was ich versuche, ist die URL des Fensters zu lesen, das ich geöffnet habe. Ich versuche, die URL zu lesen, um eine Änderung zu erkennen, damit ich entsprechend reagieren und auf der Startseite in das HTML-DOM schreiben kann. Wenn ich jedoch versuche, die URL des Dialogfelds zu lesen, erhalte ich den Fehler "Berechtigung verweigert". Um das Problem zu isolieren und neu zu erstellen, habe ich den folgenden Test erstellt, der das Problem zeigt.

<html> 
    <body> 
    <input type="button" value="test" onclick="startTest();" /> 

    <script type="text/javascript"> 
     var dwin = null; 
     var timeoutID = 0; 

     function startTest() 
     { 
     dwin = window.open("http://www.google.com", "dialog", "height=600,width=800", true); 
     timeoutID = setTimeout("timerElapsed()", 1000);   
     } 

     function timerElapsed() 
     { 
     if (timeoutID == 5) 
    { 
     clearTimeout(timeoutID); 
     alert("We're done!"); 
    } 
    else 
    {    
     if (dwin != null) 
     { 
     alert(dwin.location); 
     }    
     timeoutID = setTimeout("timerElapsed()", 1000); 
    } 
     } 
    </script> 
    </body> 
</html> 

Wie bekomme ich dwin.location? Ich bin wirklich verwirrt. Ich dachte nicht, dass das so schwierig sein würde.

Vielen Dank für Ihre Hilfe.

Antwort

0

Sie können nicht auf die geöffnete Fenster-URL zugreifen, da der domänenübergreifende Zugriff von allen Browsern untersagt ist. Sie müssen also über einen anderen Weg nachdenken.

1

Die kurze Antwort ist, dass Sie nicht in der Lage sein werden, es sei denn, Sie überarbeiten Ihre Strategie. Der einfache Grund ist, dass Sie ein neues Browser Fenster geöffnet haben. Der Benutzer könnte Links von Ihrer Website aus verfolgen, und es wäre ein Datenschutzverstoß für den Browser, Ihnen mitzuteilen, auf welcher Site er sich befindet. URLs selbst sind private Informationen, wenn sie nicht von Ihrer Website stammen.

Der Weg um dies ist, dass, wenn das Fenster Popup ist Ihre Website, der Code in diesem Fenster könnte zurück in das übergeordnete Fenster, was der aktuelle Standort des untergeordneten Fensters ist.

+0

Aber was ist, wenn das Fenster Popup nicht meine Seite ist? Während die Endseite meine Site ist, wird sie von einer Seite, die nicht meine Site ist, auf diese Seite umgeleitet. Gibt es keine Möglichkeit, dies zu tun? – Villager

1

nicht wirklich eine Antwort auf Ihre Fragen, aber:

  • mit einem Pop-up, werden Sie Hut Art von Sicherheitseinschränkungen/Probleme bekommen, weil Sie eine andere Domain Sie verwenden
  • je nachdem, wie Öffnen Sie es, das Popup könnte durch popup-blockierende Funktionen des Browsers
  • Popups wirklich ärgerlich für die Benutzer blockiert werden!

Gibt es keine Möglichkeit, ein Popup zu vermeiden?


Vor wenigen Tagen habe ich diesen Blog-Post über Twitter und OAuth sah: Writing A Simple Twitter Client Using the PHP Zend Framework's OAuth Library (Zend_Oauth)

Auch wenn Sie nicht verwenden Zend Framework noch PHP, dass Post zeigt es möglich ist, OAuth zu verwenden auf Twitter zu authentifizieren, ohne mit anyking Popup :-)


Warum haben nicht nur Ihren Benutzer auf die Authentifizierungsseite von Twitter umgeleitet (innerhalb des Fensters aktuellen Browser), wenn sie auf den Link klicken? Und sie wieder auf der Seite haben, wenn sie sich authentifiziert haben? Es gibt wahrscheinlich einen Weg, dies mit twitter's API zu tun?
Eigentlich, so scheint es, es ist möglich (Ihre andere Frage zu zitieren):

Auf der Twitter-Website, der Benutzer die Option hat ihre Twitter Anmeldeinformationen einzugeben. Wenn sie ihre Anmeldeinformationen bereitgestellt haben, werden sie auf meine Website umgeleitet. Dies wird erreicht durch eine Rückruf-URL, die für Anwendungen auf Twitter Website eingestellt werden kann.

Ist das Problem, dass Sie fürchten, Benutzer wird nicht zurückkommen?
Nun, wenn sie auf diesen Link klicken, ist es wahrscheinlich, weil sie etwas auf Ihrer Website tun wollen, nicht? Also werden sie wahrscheinlich wiederkommen!
Vielleicht könnten Sie neben dem Link eine Erklärung abgeben, um zu erklären, was es tut und wie; das könnte ihnen helfen zu wissen, dass es normal ist, an die Authentifizierungsseite von Twitter geschickt zu werden ;-)