Entwickler-Ecke

Off Topic - Greasemonkey + jQuery Ajax-Aufruf


SAiBOT - Mi 14.09.11 13:50
Titel: Greasemonkey + jQuery Ajax-Aufruf
Hi,
ich versuche gerade auf einer Website (fremd domain) mittels Greasemonkey einen Ajax request über jQuery zu einem PHP-Skript auf meinem Server zu machen. Ich bekomme immer eine Fehlermeldung ("Methode nicht erlaubt" oder so ähnlich). Das Problem liegt wohl daran, dass man keine Ajax Aufrufe über verschiede Domains machen kann. Ich habe dann was von JSNOP gelesen, womit dieses Vorhaben angeblich umsetzbar ist. Hat jemand schon Erfahrung mit diesen Cross-site Ajax Aufrufen und kann mir erklären wie es funktioniert?


BenBE - Mi 14.09.11 13:54

Hab da für GeSHi mal selber was gebaut, müsste ich raussuchen.

Wichtig dabei ist, dass das Script auf der Ziel-Domain sogenannte Pre-Flight-Requests mit einem Policy-Header beantwortet. Auch solltest Du beachten, dass diese Cross-Domain-Geschichten nur im Firefox richtig funktionieren. Von den andren Browsern weiß ich nicht, ob da der Support inzwischen auch da ist; das letzte Mal, wo ich das geprüft hab, sah's nicht danach aus. Ich kann bei Interesse aber mal den nötigen Source raussuchen.

Gruß,
BenBE.

Edit: Hier mal der Link zur Testseite [http://api.geshi.org/]. Einfach mit Live Headers die mitgesendeten Header betrachten.


SAiBOT - Mi 14.09.11 16:33

Ok, in deinem Beispiel wird der Ajax request auf dem selben Server ausgeführt wo auch das PHP-Skript liegt.


Kha - Mi 14.09.11 16:45

Für den Nuss-KI-Replayer, der auf Github gehostet ist, hat Christian Access-Control-Allow-Origin: * (das wird wohl auch Bennys Seite benutzen, hab es mir nicht angeschaut) für die entsprechende EE-Seite aktiviert, so musste ich den jQuery-Aufruf nicht einmal abändern. Funktioniert afaik immer noch nicht im IE (dort geht das tollerweise nicht über XHR, sondern über ein anderes Objekt), aber das dürfte dir ja egal sein ;) .


BenBE - Mi 14.09.11 17:21

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
Ok, in deinem Beispiel wird der Ajax request auf dem selben Server ausgeführt wo auch das PHP-Skript liegt.

Jep. Da ich aber keine GET, sondern eine HIGHLIGHT-Anfrage an den Server schicke, gelten die gleichen Beschränkungen, als wenn es eine andere Domain wäre.

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
  • Kann ich wenn ich zB. für Google ein GM Skript geschrieben habe, damit Anfragen an meinen eigenen Server senden?

Für ein GM-Script gibt es in der GM-API direkt eine Funktion, die die Anfrage im Chrome-Context stellt. Die nutzt z.B. der EdgeMonkey um bei GitHub nach Updates zu suchen, ohne dass dort diese zusätzlichen Header mitgesendet werden müssen.

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
  • Ich vermute das der Ajax-Aufruf normales Javascript ist und kein jQuery (was mir reichen würde), ist das korrekt?

  • Jup. Ist normales XmlHttpRequest.

    user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
  • Kann ich verschachtelte Javascript Arrays übermitteln?

  • Jup. Alles was normales XHR auch kann.

    user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
  • Muss ich spezielle Webserver (IIS) einstellungen vornehmen?

  • Jain. Du musst auf dem Webserver die Accept-Policy-Header konfigurieren. Ob du die nun via Script erzeugst (wie ich das auf api.geshi.org mache, oder via Server-Konfiguration, ist eigentlich egal. Wichtig ist nur, DASS sie gesendet werden.

    user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
    Für den Nuss-KI-Replayer, der auf Github gehostet ist, hat Christian Access-Control-Allow-Origin: * (das wird wohl auch Bennys Seite benutzen, hab es mir nicht angeschaut) für die entsprechende EE-Seite aktiviert,

    Jip. Ich nutz aus der Reihe noch paar mehr, um auch zusätzliche HTTP-Methods zuzulassen (z.B. eben HIGHLIGHT und VERSION).

    user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
    so musste ich den jQuery-Aufruf nicht einmal abändern. Funktioniert afaik immer noch nicht im IE (dort geht das tollerweise nicht über XHR, sondern über ein anderes Objekt), aber das dürfte dir ja egal sein ;) .

    IE ist ja auch kein Browser. :mahn:


    SAiBOT - Do 15.09.11 15:30

    Habe es über die GM API-Funktion gelöst, reicht mir völlig. Vielen Dank euch beiden!