2009-05-13 17 views
216

Ich habe versucht, diese Zeile setzen, aber es funktioniert nicht:Wie kann ich jQuery in Greasemonkey verwenden?

// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js 

jQuery nicht in Greasemonkey funktioniert. Gibt es eine andere Möglichkeit, jQuery in Greasemonkey zu verwenden?

-

Für alle Menschen, die das gleiche Problem haben, müssen Sie die Datei laden Sie sie auf greasespot dann von dort installieren.

Die Option Neues Skript erstellen funktioniert nicht!

+0

@ Rob und wer soll das gehen? Wie kann man ein Skript installieren, das nie auf userscripts.org läuft? –

+14

@Jorge, wussten Sie nicht, dass diese Website absolut keine Magie darin hat? Sie können nach Dateien mit der Dateierweiterung .user.js suchen, und Greasemonkey fragt, ob Sie es installieren möchten. Dazu gehören Dateien auf Ihrem lokalen Computer. Die Installation eines Skripts ist so einfach wie das Ziehen in Ihren Browser. –

+5

Es sieht so aus, als ob es jetzt gut funktioniert, auch wenn die Datei nach der Installation bearbeitet wird. –

Antwort

170

Vielleicht haben Sie nicht die letzte Version von Greasemonkey. Es war Version 0.8, die @require hinzugefügt wurde.

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js 

Wenn Sie nicht über 0,8 haben, dann verwenden die Technik Joan Piedra für manually adding a script element to the page beschreibt.

Zwischen Version 0.8 und 0.9 wird @requirenur verarbeitet, wenn das Skript zum ersten Mal installiert wird. Wenn Sie die Liste der erforderlichen Skripts ändern, müssen Sie das Skript deinstallieren und neu installieren. Greasemonkey lädt das benötigte Skript einmalig bei der Installation herunter und verwendet danach eine zwischengespeicherte Kopie.

Ab 0.9 hat sich das Greasemonkey-Verhalten geändert (Adresse a tangentially related issue), so dass es nun nach jedem Editieren die benötigten Skripte lädt; Neuinstallation des Skripts ist nicht mehr erforderlich.

+0

Rob, also, was muss ich tun? Ich erstelle meine Benutzerskripte mit dem Link "New User Script". Ich füge das @require hinzu und es hat nicht funktioniert. Also wie kann ich es funktionieren lassen? Bitte erklären Sie mir, dass die @ require-Methode funktionieren soll, weil sie viel eleganter ist als die Skriptelement-Methode –

+1

Ok Also, ich habe es geschafft. Vielen Dank!!! Ich habe das Skript in Greasespot hochgeladen und von dort installiert. –

+2

Ich stelle mir vor, dass das Skript sofort installiert wird, wenn Sie in Greasemonkey ein neues Skript erstellen. Dieses Skript ist die leere Standarddatei, was bedeutet, dass Sie Ihre Chance verpasst haben, externe Skripts zu benötigen. –

19

Es ist absolut nichts falsch daran, die gesamte jQuery in Ihr Greasemonkey-Skript aufzunehmen. Nehmen Sie einfach die Quelle und legen Sie sie oben in Ihrem Benutzerskript ab. Sie müssen kein Skript-Tag erstellen, da Sie bereits JavaScript ausführen!

Der Benutzer lädt das Skript nur einmal herunter, daher ist die Größe des Skripts kein großes Problem. Wenn Sie möchten, dass Ihr Greasemonkey-Skript auch in nicht-GM-Umgebungen (z. B. Operas GM-esque Benutzerskripten oder Greasekit auf Safari) funktioniert, hilft es nicht, GM-einzigartige Konstrukte wie @require zu verwenden.

3

Sie können ein neues Skript mit dem Skript "New User" in Greasemonkey erstellen, aber Sie müssen die Datei config.xml im Ordner gm_scripts bearbeiten.

Ihre config.xml Datei sollte eine ähnliche Syntax wie folgt aus:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test"> 
     <Include>http://*</Include> 
     <Require filename="jquery.js"/> 
</Script> 

Beachten Sie die <Require>-Tag.

In Ihrem Skript können Sie direkte jQuery-Syntax verwenden. Stellen Sie sicher, dass Sie das Request-Tag in der Greasemonkey-Kopfzeile haben. Hier ist ein Hallo Welt Beispiel:

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

$(document).ready(function() { 
     alert("Hello world!"); 
}); 

dass Denken Sie daran, nach dem config.xml Modifizieren Sie Ihren Browser für Grease neu zu starten, um die Einstellungen zu laden.

Beachten Sie auch, dass Sie die Datei jquery.js in Ihren Skriptverzeichnisordner kopieren müssen, damit dies funktioniert. Ich habe das getestet und es funktioniert nur, wenn Sie die Datei dort manuell kopieren.

Glückliche jQuerying!

7

Robs Lösung ist die richtige - verwenden Sie @require mit der jQuery-Bibliothek und stellen Sie sicher, dass Sie das Skript neu installieren, damit die Anweisung verarbeitet wird.

Eine Sache, die ich denke, ist es wert hinzuzufügen, dass Sie jQuery normalerweise verwenden können, sobald Sie es in Ihrem Skript enthalten, mit Ausnahme von AJAX-Methoden. Standardmäßig sucht jQuery nach XMLHttpRequest, das im Greasemonkey-Kontext nicht existiert. Ich habe über a workaround geschrieben, wo Sie einen Wrapper für GM_xmlhttpRequest (die Greasemonkey-Version von XHR) erstellen und jQuery's ajaxSetup() verwenden, um Ihre umbrochene Version als Standard anzugeben. Sobald Sie dies tun, können Sie wie gewohnt $.get und $.post verwenden.

Möglicherweise haben Sie auch Probleme mit $.getJSON von jQuery, weil es JSONP mit <script> Tags lädt. Dies führt zu Fehlern, da jQuery die Callback-Funktion im Bereich des Greasemonkey-Fensters definiert und die geladenen Skripte im Bereich des Hauptfensters nach dem Callback suchen. Am besten verwenden Sie stattdessen $.get und analysieren das Ergebnis mit JSON.parse().

4

Aktualisieren: Wie der Kommentar unten sagt, ist diese Antwort veraltet.

Wie alle anderen gesagt haben, wird @require nur ausgeführt, wenn das Skript installiert wurde. Allerdings sollten Sie auch beachten, dass jQuery 1.4. * Derzeit nicht mit dem greasemonkey funktioniert. Sie können hier für Details sehen: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Sie müssen jQuery 1.3.2 verwenden, bis sich die Dinge ändern.

+3

Diese Antwort ist Ab GM-Version 0.9 oder höher veraltet. –

+3

@Brock: Warum? Kannst du uns das erklären? –

1

Sie können Component unavailable erhalten, wenn Sie das jQuery-Skript direkt importieren.

Vielleicht ist es das, was @Conley redete ...

können Sie verwenden

@require  http://userscripts.org/scripts/source/85365.user.js 

, die eine modifizierte Version ist auf Grease zu arbeiten, und erhalten dann die jQuery-Objekt

var $ = unsafeWindow.jQuery; 
$("div").css("display", "none"); 
+0

Ich weiß, dass dies 5 Jahre alt ist, aber ich frage mich nur: Ist es nicht falsch, das jQuery-Objekt so zu bekommen, als ob es bereits auf der Seite definiert wäre, und es als unsafeWindow.jQuery bezeichnet? –

69

Wenn Sie jQuery auf einer Site verwenden möchten, auf der es bereits enthalten ist, ist dies der richtige Weg (inspiriert von BrunoLM):

var $ = unsafeWindow.jQuery; 

Ich weiß, das war nicht die ursprüngliche Absicht der Frage, aber es wird zunehmend ein häufiger Fall und Sie haben diesen Fall nicht explizit ausgeschlossen. ;)

+4

In Chrome anscheinend nicht unterstützt - http://www.chromium.org/developers/design-documents/user-scripts – Ash

+0

Funktioniert in Scriptish von Firefox! – Gqqnbig

+1

Will testen, dass Sie es nicht schon so haben: 'if (typeof $ == 'undefined') {var $ = unsafeWindow.jQuery; } ' In Chrome wird eine Website Jquery bereits verfügbar sein. – Jonathon

2

die @require Meta funktioniert nicht, wenn Sie, müssen Sie jQuery Ereignisse unbind auf einer Webseite verwenden möchten, in der Webseite ein jQuery-Bibliothek verwenden enthalten und es dann in Grease erhalten mit var $ = unsafeWindow.jQuery;How do I unbind jquery event handlers in greasemonkey?

0

@require ist NICHT nur verarbeitet, wenn das Skript zum ersten Mal installiert wird! Bei meinen Beobachtungen wird es zur ersten Ausführungszeit verarbeitet! So können Sie ein Skript über Greasemonkey Befehl zum Erstellen eines brandneuen Skripts installieren.Das einzige, was Sie beachten müssen, ist, dass kein Seiten-Reload ausgelöst wird, bevor Sie den @require Teil hinzufügen. (und speichern Sie das neue Skript ...)

Verwandte Themen