2009-04-08 12 views
1

Ich versuche, eine Ajax-Abfrage innerhalb eines Greasemonkey-Skripts durchzuführen, aber ich bin nicht in der Lage, Daten von einer Remote-URL zu laden. Das Skript scheint nur dann zu funktionieren, wenn die angezeigte Seite dieselbe Domäne wie der Ajax-Aufruf ist. Beispiel:Load remote URL mit Greasemonkey und jQuery

// ==UserScript== 
// @name   Hello jQuery 
// @namespace  http://www.example.com/ 
// @description jQuery test script 
// @include  * 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js 
// ==/UserScript== 

$(document).ready(function() { 
    $.get("http://www.google.com", function(data){ 
     alert("Data Loaded: " + data); 
    }); 
}); 

// EOF 

Dieser Benutzer Skript perfekt funktioniert, wenn google.com besuchen, aber es funktioniert nicht ohne Fehler oder die Warnung auf einer anderen Domäne. Was ist die Lösung?

Antwort

4

Nur GM_xmlhttpRequest kann Cross-Site-Zugriff, nicht die normale XMLHttpRequest, die jQuery verwendet.

+0

Aber Sie können immer noch den responseText und feed es in jQuery, wenn Sie die üblichen Sachen verwenden, um es zu analysieren: $ (responseText) – Plutor

0

Ja, das geht nicht. Es heißt XSS

+2

Greasemonkey-Version von XHR, [GM_xmlhttpRequest] (http://wiki.greasespot.net/GM_xmlhttpRequest) unterliegt nicht die gleiche Ursprungsrichtlinie, die XSS verhindert. – Ryan

0

Sie können versuchen load(URL, [data], [func]).

Ich habe es in a sample application verwendet, und es geladen Google Suche für mich, obwohl es auf einer anderen Domäne ist. Ein Nachteil besteht darin, dass beim Versuch, auf eine andere Domäne zuzugreifen, eine JavaScript-Sicherheitswarnung ausgegeben wird.

Ich hoffe, es hilft!

P.S. Ich habe tatsächlich eine Nicht-Google-Domain ausprobiert und einige Fehler erhalten. Aber ich fand, der Fehler war da, weil die Seite nicht mit dem empfangenen Antwortinhalt (JavaScript-Fehler, usw.) kompatibel war. Ich habe einige Seiten erfolgreich ausgeführt, die ich in einer anderen Domäne erstellt habe. Sie müssen also aufpassen, welche Art von Inhalt Sie auch laden.

Wahrscheinlich wäre in einem solchen Fall das Laden des Inhalts in einem Iframe besser für Sie.

1

In Greasemonkey gibt es eine Funktion namens GM_xmlhttpRequest für XMLHttpRequest. Es entspricht jedoch nicht der XmlHttprequest Schnittstelle. Daher ist es nicht möglich, es mit jQuery zu verwenden. Dies funktioniert mit jQuery 1.5.

jQuery Ajax in Greasemonley sieht dann aus wie:

$.ajax({ 
    url: '/p/',// this even works for cross-domain requests by default 
    xhr: function(){ return new GM_XHR(); }, 
    type: 'POST', 
    success: function(val){ 
     ... 
    } 
}); 

Quelle: http://www.monperrus.net/martin/greasemonkey+jquery+and+xmlhttprequest+together