web-dev-qa-db-fra.com

Comment utiliser jQuery dans Greasemonkey?

J'ai essayé de mettre cette ligne mais ça ne marche pas:

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

jQuery ne fonctionne pas du tout dans Greasemonkey. Existe-t-il une autre façon d’utiliser jQuery dans Greasemonkey?

-

Pour toutes les personnes qui ont le même problème, vous devez télécharger le fichier sur greaspot puis l'installer à partir de là.

L'option Créer un nouveau script ne fonctionnerait pas!

227
Keira Nighly

Peut-être que vous n'avez pas une version assez récente de Greasemonkey. C'était la version 0.8 qui ajoutait @require.

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

Si vous n'avez pas 0.8, utilisez la technique décrite par Joan Piedra pour en ajoutant manuellement un élément script à la page .

Entre les versions 0.8 et 0.9, @require est uniquement traité lors de la première installation du script. Si vous modifiez la liste des scripts requis, vous devez désinstaller votre script et le réinstaller; Greasemonkey télécharge le script requis une fois lors de l'installation et utilise ensuite une copie en cache.

À compter de la version 0.9, le comportement de Greasemonkey a changé (pour résoudre le problème problème lié de manière tangentielle ), de sorte qu'il charge désormais les scripts requis après chaque modification. la réinstallation du script n'est plus nécessaire.

183
Rob Kennedy

Si vous voulez utiliser jQuery sur un site où il est déjà inclus, voici le chemin à parcourir (inspiré par BrunoLM):

var $ = unsafeWindow.jQuery;

Je sais que ce n'était pas le but initial de la question, mais cela devient de plus en plus un cas courant et vous n'avez pas explicitement exclu ce cas. ;)

78
Henrik Heimbuerger

Il n'y a absolument rien de mal à inclure l'intégralité de jQuery dans votre script Greasemonkey. Il suffit de prendre le code source et de le placer en haut de votre script utilisateur. Pas besoin de faire une balise de script, car vous exécutez déjà JavaScript!

De toute façon, l'utilisateur ne télécharge le script qu'une seule fois, donc la taille du script n'est pas un gros problème. En outre, si vous souhaitez que votre script Greasemonkey fonctionne dans des environnements non-GM (tels que les scripts utilisateur Opera-GM d'Opera ou Greasekit sur Safari), il vous sera utile de ne pas utiliser de constructions uniques à GM telles que @require.

21
Daniel Lew

La solution de Rob est la bonne: utilisez @require avec la bibliothèque jQuery et veillez à réinstaller votre script pour que la directive soit traitée.

Une chose qui mérite d’être ajoutée est que vous pouvez utiliser jQuery normalement une fois que vous l’avez inclus dans votre script , à l’exception de AJAX méthodes . Par défaut, jQuery recherche XMLHttpRequest, qui n'existe pas dans le contexte Greasemonkey. J'ai écrit à propos de ne solution de contournement où vous créez un wrapper pour GM_xmlhttpRequest (la version Greasemonkey de XHR) et utilisez ajaxSetup() de jQuery pour spécifier votre version enveloppée comme valeur par défaut. Ceci fait, vous pouvez utiliser $.get et $.post comme d'habitude.

Vous pouvez également avoir des problèmes avec $.getJSON de jQuery car il charge JSONP à l'aide des balises <script>. Cela entraîne des erreurs car jQuery définit la fonction de rappel dans l'étendue de la fenêtre Greasemonkey et que les scripts chargés recherchent le rappel dans l'étendue de la fenêtre principale. La meilleure solution consiste à utiliser $.get à la place et à analyser le résultat avec JSON.parse().

7
Ryan

Si vous utilisez chrome, vous devez choisir une alternative, car Chromium ne prend pas en charge @require.

Source: The Chromium Project - Scripts utilisateur

Plus de détails et alternatives sur Comment utiliser jQuery dans les scripts Greasemonkey dans Google Chrome?

4
Filype

Mise à jour : Comme le dit le commentaire ci-dessous, cette réponse est obsolète.

Comme tout le monde l'a dit, @require n'est exécuté que lorsque le script est installé. Cependant, vous devez également noter qu'actuellement jQuery 1.4. * Ne fonctionne pas avec greasemonkey. Vous pouvez voir ici pour plus de détails: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Vous devrez utiliser jQuery 1.3.2 jusqu'à ce que les choses changent.

4
Conley Owens

Vous pouvez créer un nouveau script à l'aide du script New User Script dans Greasemonkey, mais vous devez modifier le fichier config.xml dans le dossier gm_scripts.

Votre fichier config.xml devrait avoir une syntaxe similaire à celle-ci:

<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>

Notez la balise <Require>.

Dans votre script, vous pouvez utiliser la syntaxe directe jQuery. Assurez-vous que vous avez la balise require dans l'en-tête Greasemonkey. Voici un exemple de Hello World:

// ==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!");
});

N'oubliez pas qu'après avoir modifié config.xml, vous devez redémarrer votre navigateur pour que Greasemonkey puisse recharger à nouveau les paramètres.

Notez également que vous devez copier le fichier jquery.js dans votre dossier de répertoires de scripts pour que cela fonctionne. J'ai testé cela, et cela ne fonctionne que si vous copiez le fichier manuellement à cet endroit.

Joyeux jQuerying!

3
Auspex

la méta @require ne fonctionne pas lorsque vous souhaitez dissocier des événements sur une page Web à l'aide de jQuery, vous devez utiliser une bibliothèque jQuery incluse dans la page Web, puis l'obtenir dans Greasemonkey avec var $ = unsafeWindow.jQuery;Comment puis-je annuler la connexion gestionnaires d’événements jquery dans greasemonkey?

2
baptx

Vous pourriez obtenir Component unavailable si vous importez directement le script jQuery.

Peut-être que c'est ce dont parlait @Conley ...

Vous pouvez utiliser

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

qui est une version modifiée pour fonctionner sur Greasemonkey, puis obtenir l'objet jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
1
BrunoLM

@require est PAS uniquement traité lors de la première installation du script! Sur mes observations, il est traité lors de la première exécution! Ainsi, vous pouvez installer un script via la commande de Greasemonkey pour créer un tout nouveau script. La seule chose à laquelle vous devez faire attention est qu’aucun rechargement de page ne soit déclenché, avant d’ajouter la partie @require. (et sauvegardez le nouveau script ...)

0
Dunstkreis