Comment puis-je utiliser jQuery dans Greasemonkey?

J'ai essayé de mettre cette ligne mais cela ne fonctionne 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 un autre moyen d'utiliser jQuery dans Greasemonkey?

--

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

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

221
demandé sur Keira Nighly 2009-05-13 20:37:44

10 réponses

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

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

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

Entre la version 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 script une fois à l'installation et utilise une copie mise en cache par la suite.

À partir de 0.9, le comportement de Greasemonkey a changé (pour adresser un problème lié tangentiellement) de sorte qu'il charge maintenant les scripts requis après chaque édition; réinstaller le script n'est plus nécessaire.

176
répondu Rob Kennedy 2018-08-30 07:08:42

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

var $ = unsafeWindow.jQuery;

Je sais que ce n'était pas l'intention initiale de la question, mais c'est de plus en plus un cas commun et vous n'avez pas explicitement exclu ce cas. ;)

73
répondu Henrik Heimbuerger 2010-11-23 22:51:14

Il n'y a absolument rien de mal à inclure l'intégralité de jQuery dans votre script Greasemonkey. Prenez simplement la source et placez-la en haut de votre script utilisateur. Pas besoin de créer une balise de script, puisque vous exécutez déjà JavaScript!

L'utilisateur ne télécharge le script qu'une seule fois de toute façon, donc la taille du script n'est pas une grande préoccupation. En outre, si vous souhaitez que votre script Greasemonkey fonctionne dans des environnements non GM (tels que les scripts utilisateur GM-esque D'Opera ou Greasekit on Safari), cela aidera à ne pas utiliser des constructions GM uniques telles que @require.

20
répondu Daniel Lew 2009-05-13 17:04:14

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

Une chose que je pense utile d'ajouter est que vous pouvez utiliser jQuery normalement une fois que vous l'avez inclus dans votre script, sauf pour les méthodes AJAX . Par défaut, jQuery recherche XMLHttpRequest, qui n'existe pas dans le contexte Greasemonkey. J'ai écrit à propos de une solution de contournement où vous créez un wrapper pour GM_xmlhttpRequest (le Greasemonkey version de XHR) et utilisez ajaxSetup() de jQuery pour spécifier votre version encapsulée par défaut. Une fois que vous faites cela, vous pouvez utiliser $.get et $.post, comme d'habitude.

Vous pouvez également avoir des problèmes avec $.getJSON de jQuery car il charge JSONP en utilisant les balises <script>. Cela conduit à des erreurs car jQuery définit la fonction de rappel dans la portée de la fenêtre Greasemonkey et les scripts chargés recherchent le rappel dans la portée de la fenêtre principale. Votre meilleur pari est d'utiliser $.get à la place et d'analyser la résultat avec JSON.parse().

7
répondu Ryan 2010-03-24 00:00:17

Update : 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 devriez é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
répondu Conley Owens 2011-06-12 04:01:41

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

Source: les scripts utilisateur du projet Chromium

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

4
répondu Filype 2017-05-23 12:02:17

Vous pouvez créer un nouveau script en utilisant le nouveau script utilisateur dans Greasemonkey mais vous devez modifier la configuration.fichier xml dans le dossier gm_scripts.

Votre configuration .le fichier xml doit 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 jQuery directe. Assurez-vous d'avoir la balise require dans L'en-tête Greasemonkey. Voici un exemple 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!");
});

Rappelez-vous qu'après avoir modifié la configuration .xml vous vous devez redémarrer votre navigateur pour Greasemonkey pour recharger les paramètres à nouveau.

Notez Également que vous devez copier le jquery.fichier js dans votre dossier de répertoire de script pour que cela fonctionne. J'ai testé cela, et cela ne fonctionne que si vous copiez le fichier manuellement.

Joyeux jQuerying!

3
répondu Auspex 2009-12-23 12:02:14

La méta @ require ne fonctionne pas lorsque vous souhaitez dissocier des événements sur une page Web en utilisant jQuery, vous devez utiliser une bibliothèque jQuery incluse dans la page Web, puis l'obtenir dans Greasemonkey avec var $ = unsafeWindow.jQuery; comment dissocier les gestionnaires d'événements jquery dans greasemonkey?

2
répondu baptx 2017-05-23 12:34:24

Vous pouvez obtenir Component unavailable Si vous importez directement le script jQuery.

C'est peut-être ce dont @Conley parlait...

Vous pouvez utiliser

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

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

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
1
répondu BrunoLM 2010-09-04 01:29:56

@require N'est pas traité uniquement lorsque le script est installé pour la première fois! Sur mes observations, il est traité sur la première heure d'exécution! Ainsi, vous Pouvez installer un script via la commande Greasemonkey pour créer un tout nouveau script. La seule chose dont vous devez vous soucier est qu'il n'y a pas de rechargement de page déclenché, avant d'ajouter la partie @require. (et enregistrez le nouveau script...)

0
répondu Dunstkreis 2013-02-14 17:19:50