Wie kann ich jQuery in Greasemonkey verwenden?

234

Ich habe versucht, diese Zeile zu setzen, aber es funktioniert nicht:

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

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

- -

Für alle Personen, die das gleiche Problem haben, müssen Sie die Datei auf greasespot hochladen und von dort aus installieren.

Die Option Neues Skript erstellen würde nicht funktionieren!

Keira Fast
quelle
14
@Jorge, wusstest du nicht, dass diese Website absolut keine Magie enthält? Sie können mit der Dateierweiterung .user.js zu allem navigieren, und Greasemonkey fragt Sie, ob Sie es installieren möchten. Dazu gehören Dateien auf Ihrem lokalen Computer. Das Installieren eines Skripts ist so einfach wie das Ziehen in Ihren Browser.
Rob Kennedy
5
Es sieht so aus, als ob es jetzt auch beim Bearbeiten von Dateien nach der Installation gut funktioniert.
Josef Sábl
6
Josef hat recht - seit Version 0.9.0 installiert Greasemonkey nun @required files, sobald die Datei bearbeitet wird.
Rory O'Kane
1
Vergessen Sie auch nicht, noch $(document).ready(function() {...});in Ihrem Code zu verwenden
Benutzer
1
Der einfachste Weg, Sie @requireszu aktualisieren, besteht darin, am Ende der @requireAnweisung einen Hash oder einen Querystring hinzuzufügen und ihn zu ändern, wenn eine Aktualisierung erforderlich ist. Ähnlich wie Sie ein Favicon "zwischenspeichern" würden. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Antworten:

189

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

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 

Wenn Sie nicht über 0,8 verfügen, verwenden Sie die von Joan Piedra beschriebene Technik, um der Seite manuell ein scriptElement hinzuzufügen .

Zwischen Version 0.8 und 0.9 @requirewird nur verarbeitet, wenn das Skript zum ersten Mal installiert wird. Wenn Sie die Liste der erforderlichen Skripte ändern, müssen Sie Ihr Skript deinstallieren und neu installieren. Greasemonkey lädt das erforderliche Skript einmal bei der Installation herunter und verwendet anschließend eine zwischengespeicherte Kopie.

Ab 0.9 hat sich das Verhalten von Greasemonkey geändert (um ein tangentiales Problem zu beheben ), sodass jetzt nach jeder Bearbeitung die erforderlichen Skripte geladen werden. Eine Neuinstallation des Skripts ist nicht mehr erforderlich.

Rob Kennedy
quelle
Rob, also was muss ich tun? Ich erstelle meine Benutzerskripte über den Link Neues Benutzerskript. Ich füge das @require hinzu und es hat nicht funktioniert. Wie kann ich es zum Laufen bringen? Bitte erklären Sie, dass die @ require-Methode funktionieren soll, da sie viel eleganter ist als die
Skriptelementmethode
1
Ok, also habe ich es geschafft. Vielen Dank!!! Ich habe das Skript in Greasespot hochgeladen und von dort aus installiert.
Keira fast
2
Ich stelle mir vor, dass beim Erstellen eines neuen Skripts in Greasemonkey das Skript sofort installiert wird. Dieses Skript ist die leere Standarddatei. Dies bedeutet, dass Sie die Möglichkeit verpasst haben, externe Skripte zu benötigen.
Rob Kennedy
Es gibt also keine Möglichkeit, @require für ein neues Skript zu verwenden, das Sie erstellen? : /
Quano
4
Es ist ganz einfach, @Quano. Erstellen Sie eine neue .user.js-Datei, schreiben Sie Ihr Skript hinein und ziehen Sie es dann in Ihren Browser, um es zu installieren. Die Einschränkung, dass externe Skripte erforderlich sind, besteht nur, wenn Sie das Skript über die Benutzeroberfläche von Greasemonkey erstellen. Es ist jedoch nicht erforderlich, dass Sie Greasemonkey zum Erstellen der Skriptdatei verwenden müssen. Sie können das Skript nach der Installation bearbeiten. Wenn Sie jedoch neue @requireAnweisungen hinzufügen möchten , müssen Sie das Skript deinstallieren und neu installieren, damit es wirksam wird.
Rob Kennedy
81

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ß, dass dies nicht die ursprüngliche Absicht der Frage war, aber es wird zunehmend zu einem häufigen Fall, und Sie haben diesen Fall nicht ausdrücklich ausgeschlossen. ;)

Henrik Heimbuerger
quelle
4
Anscheinend nicht in Chrome unterstützt - chromium.org/developers/design-documents/user-scripts
Ashley
Funktioniert in der Schrift von Firefox!
Gqqnbig
2
Willst du testen, dass du es noch nicht so hast: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } In Chrome ist eine Site Jquery bereits verfügbar.
Jonathon
Hmm. Ich bekomme wirklich seltsame Fehler, wenn ich das benutze. Dies alert($('.submit_entry').length);ist sowohl ein Fehler als auch das gleichzeitige Senden der entsprechenden Warnung.
Jonathon
21

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

Der Benutzer lädt das Skript sowieso nur einmal herunter, sodass die Größe des Skripts kein großes Problem darstellt. Wenn Sie jemals möchten, dass Ihr Greasemonkey-Skript in Nicht-GM-Umgebungen funktioniert (z. B. in den GM-ähnlichen Benutzerskripten von Opera oder in Greasekit auf Safari), ist es außerdem hilfreich, keine GM-eindeutigen Konstrukte wie @require zu verwenden.

Dan Lew
quelle
7

Robs Lösung ist die richtige - verwenden Sie sie @requiremit der jQuery-Bibliothek und installieren Sie Ihr Skript neu, damit die Direktive verarbeitet wird.

Eine Sache, die ich für erwähnenswert halte, ist, dass Sie jQuery normal verwenden können, sobald Sie es in Ihr Skript aufgenommen haben, mit Ausnahme von AJAX-Methoden . Standardmäßig sucht jQuery nach XMLHttpRequest, das im Greasemonkey-Kontext nicht vorhanden ist. Ich habe über eine Problemumgehung geschrieben, bei der Sie einen Wrapper für GM_xmlhttpRequest (die Greasemonkey-Version von XHR) erstellen und mit jQuery's ajaxSetup()Ihre umschlossene Version als Standard angeben. Sobald Sie dies tun, können Sie $.getund $.postwie gewohnt verwenden.

Möglicherweise haben Sie auch Probleme mit jQuery's, $.getJSONda JSONP mithilfe von <script>Tags geladen wird . Dies führt zu Fehlern, da jQuery die Rückruffunktion im Bereich des Greasemonkey-Fensters definiert und die geladenen Skripte im Bereich des Hauptfensters nach dem Rückruf suchen. Am besten verwenden Sie $.getstattdessen und analysieren das Ergebnis mit JSON.parse().

Ryan
quelle
4

Sie können ein neues Skript mit dem Skript für neue Benutzer in Greasemonkey erstellen, müssen jedoch die Datei config.xml im Ordner gm_scripts bearbeiten.

Ihre Datei config.xml sollte eine ähnliche Syntax haben:

<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 das <Require>Tag.

In Ihrem Skript können Sie die direkte jQuery-Syntax verwenden. Stellen Sie sicher, dass Sie das require-Tag im Greasemonkey-Header haben. Hier ist ein Hello World-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!");
});

Denken Sie daran, dass Sie nach dem Ändern der Datei config.xml Ihren Browser neu starten müssen, damit Greasemonkey die Einstellungen erneut lädt .

Beachten Sie außerdem, dass Sie die Datei jquery.js in Ihren Skriptverzeichnisordner kopieren müssen, damit dies funktioniert. Ich habe dies getestet und es funktioniert nur, wenn Sie die Datei dort tatsächlich manuell kopieren.

Viel Spaß beim jQuerying!

Auspex
quelle
4

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

Wie alle anderen gesagt haben, wird @require nur ausgeführt, wenn das Skript installiert wurde. Beachten Sie jedoch auch, dass jQuery 1.4. * Derzeit nicht mit greasemonkey funktioniert. Weitere Informationen finden Sie hier: 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 etwas ändert.

Conley Owens
quelle
3
Diese Antwort ist ab GM Version 0.9 oder höher veraltet.
Brock Adams
3
@Brock: Warum? Können Sie uns Noobs erklären?
Trevor Sullivan
1

Sie erhalten möglicherweise, Component unavailablewenn Sie das jQuery-Skript direkt importieren.

Vielleicht ist es das, worüber @Conley sprach ...

Sie können verwenden

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

Dies ist eine modifizierte Version, um mit Greasemonkey zu arbeiten und dann das jQuery-Objekt abzurufen

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
BrunoLM
quelle
Mir ist klar, dass dies 5 Jahre sind, aber ich frage mich nur: Ist es nicht falsch, das jQuery-Objekt so abzurufen, wie es bereits auf der Seite definiert wurde, und es als unsafeWindow.jQuery zu bezeichnen?
jj_
0

@requirewird NICHT nur bei der Erstinstallation des Skripts verarbeitet! Nach meinen Beobachtungen wird es bei der ersten Ausführungszeit bearbeitet! Sie können also ein Skript über den Befehl von Greasemonkey installieren, um ein brandneues Skript zu erstellen. Das einzige, worauf Sie achten müssen, ist, dass kein erneutes Laden der Seite ausgelöst wird, bevor Sie das @requireTeil hinzufügen . (und speichern Sie das neue Skript ...)

Dunstkreis
quelle