2010-04-13 7 views
7

Ich habe kürzlich mit jQuery gearbeitet und stieß auf ein Problem, wo ich es nicht in ein Benutzer-Skript aufnehmen konnte, weil XmlHttpRequest same origin policy verwendet. Nach weiteren Tests habe ich festgestellt, dass die meisten Browser auch die von W3C definierte Zugriffssteuerung Cross-Origin Resource Sharing als Workaround für Probleme mit derselben Ursprungsrichtlinie unterstützen. Ich testete dies, indem ich das jQuery-Skript auf einem lokalen Webserver hosten ließ, der den http-Header enthielt, wodurch das Skript mit XmlHttpRequest heruntergeladen werden konnte, damit es in mein Benutzer-Skript aufgenommen werden konnte. Ich würde gerne eine gehostete Version von jQuery verwenden, wenn ich das Skript freigebe, aber bisher habe ich mit Tools wie http://www.seoconsultants.com/tools/headers keine Seiten gefunden, die den ursprungsübergreifenden Zugriff auf das jQuery-Skript erlauben. Hier ist die Liste, die ich bisher getestet:Alle gehosteten Versionen von jQuery mit dem Header 'Access-Control-Allow-Origin: *'?

es irgendwelche anderen gehosteten Versionen von jQuery, die Cross Herkunft Zugriff erlauben? Ich weiß, dass jQuery normalerweise über ein Skript-Tag (manchmal ein dynamisch erstelltes Skript-Tag) geladen wird, aber in diesem speziellen Fall muss ich XmlHttpRequest und Eval verwenden, um sicherzustellen, dass es in den richtigen Bereich geladen wird. Google Chrome unterstützt Benutzerskripts, unterstützt jedoch nicht @require. Das heißt, die einzige Möglichkeit, jquery in a user script in Google Chrome zu verwenden, besteht darin, es in die Datei .user.js einzubetten oder sie über ein XmlHttpRequest-Objekt zu laden und auszuwerten. Die Einbettung ist eine nicht optimale Lösung, und während Chrome Extensions Ihnen erlauben, die jQuery js-Dateien in Erweiterungen einzuschließen, würde ich lieber mit Benutzer-Skripten bleiben, da sie viel einfacher sind und in mehr als nur einem Browser funktionieren können. Ich habe bereits Tickets mit den Teams Google Ajax APIs und jQuery eingereicht, um den domänenübergreifenden Zugriff auf das CDN zu ermöglichen, aber ich schätze, dass ich es nur für mich selbst hosten muss.

+0

Warum brauchen Sie jQuery über XMLHttpRequest importieren? Warum nicht einfach ein Skript-Tag dafür erstellen? – Pointy

+0

@Pointy Ich habe die Frage mit weiteren Informationen aktualisiert, aber kurz gesagt, ich versuche ein Benutzerscript mit jQuery zu erstellen, das sowohl in Google Chrome als auch in Firefox funktioniert. –

+0

Ehrlich Mann, Es gibt Zeiten, in denen das Verwenden deines eigenen Bewirtungswesens ein guter Spielplan ist: es sieht so aus, als ob das einer von ihnen ist. Stellen Sie nur sicher, dass es gut und im Cache ist, es ist nicht wie jQuery ist eine riesige Datei. –

Antwort

2

Da Sie diese Frage gestellt haben, Das Google CDN hat diese Header wie gewünscht hinzugefügt. Eine schnelle GET von https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js liefert den Header:

access-control-allow-origin:* 

So ein Script-Tag wie folgt hinzufügen, und Sie sind gut zu gehen:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" crossorigin="anonymous" type="text/javascript"></script> 
2

Ich hatte das gleiche Problem, und meine Lösung endete damit, die Datei selbst zu hosten. Mit meinem eigenen Hosting konnte ich domainübergreifende Anfragen für das jQuery-Skript zulassen.

Ich habe versucht, durch viele Reifen zu springen, um dies zu umgehen, und verbrachte zu viele Stunden damit, zu jagen und Skript-Hosts zu versuchen, die den domänenübergreifenden Zugriff ermöglichten. Letztendlich kam ich jedoch zu dem Schluss, dass ich, wenn ich mich auf eine unbekannte, gehostete Version des Skripts verlassen würde, auch selbst hosten könnte, weil ich mir selbst mehr vertraue als den Hosts, die ich in Erwägung zog.

2

In Amazon Cloudfront können Sie den Header Access-Control-Allow-Origin festlegen. Grundsätzlich, wenn Sie jQuery Host selbst dann eine Cloudfront CDN vor ihm halten, werden Cloudfront alle Header Relais Sie zurück an den Client gesetzt:

your jQuery -> Cloudfront jQuery -> Client Browser 
[header set] [header set]   [header set] 

Die Cloudfront CDN eingerichtet ist pro Amazon Benutzer; Der Nachteil gegenüber den gehosteten Google-APIs ist, dass Besucher Ihrer Website zum ersten Mal jQuery durch das Besuchen einer anderen Website geladen haben (und daher von der Zwischenspeicherung profitieren).