Come posso usare jQuery in Greasemonkey?


234

Ho provato a mettere questa linea ma non funziona:

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

jQuery non funziona affatto in Greasemonkey. C'è un altro modo di usare jQuery in Greasemonkey?

-

Per tutte le persone che hanno lo stesso problema, è necessario caricare il file su Greasespot e installarlo da lì.

L'opzione Crea nuovo script non funzionerebbe!


14
@Jorge, non sapevi che quel sito Web non ha assolutamente magia in esso? Puoi cercare qualsiasi cosa con l'estensione .user.js e Greasemonkey ti chiederà se desideri installarlo. Ciò include i file sul tuo computer locale. Installare qualsiasi script è semplice come trascinarlo sul tuo browser.
Rob Kennedy,

5
Sembra che ora funzioni bene anche quando si modifica il file dopo l'installazione.
Josef Sábl,

6
Josef ha ragione: dalla versione 0.9.0 , Greasemonkey ora installerà i file @ richiesti non appena il file verrà modificato.
Rory O'Kane,

1
Inoltre, non dimenticare di utilizzare ancora il $(document).ready(function() {...});tuo codice
Utente

1
Il modo più semplice per aggiornarti @requiresè aggiungere un hash o una stringa di query alla fine dell'istruzione @requiree modificarlo ogni volta che è necessario aggiornarlo. Simile al modo in cui si "cachebust" una favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache,

Risposte:


189

Forse non hai una versione abbastanza recente di Greasemonkey. È stata aggiunta la versione 0.8 @require.

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

Se non hai 0,8, usa la tecnica descritta da Joan Piedra per aggiungere manualmente un scriptelemento alla pagina .

Tra la versione 0.8 e 0.9, @requireviene elaborato solo quando lo script viene installato per la prima volta. Se si modifica l'elenco degli script richiesti, è necessario disinstallare lo script e reinstallarlo; Greasemonkey scarica lo script richiesto una volta durante l'installazione e successivamente utilizza una copia cache.

A partire da 0.9, il comportamento di Greasemonkey è cambiato (per risolvere un problema tangenzialmente correlato ) in modo che ora carichi gli script richiesti dopo ogni modifica; reinstallare lo script non è più necessario.


Rob, quindi cosa devo fare? Sto creando i miei script utente utilizzando il collegamento Nuovo script utente. Aggiungo @require e non ha funzionato. Quindi, come posso farlo funzionare? Spiega che voglio che il metodo @require funzioni perché è molto più elegante del metodo dell'elemento script
Keira Nighly,

1
Ok, quindi l'ho fatto funzionare. Grazie!!! Ho caricato lo script in Greasespot e l'ho installato da lì.
Keira Nighly,

2
Immagino che quando crei un nuovo script da Greasemonkey, lo script viene installato immediatamente. Quello script è il file vuoto predefinito, il che significa che hai perso l'occasione di richiedere qualsiasi script esterno.
Rob Kennedy,

Quindi non c'è modo di usare @require su un nuovo script che stai realizzando? : /
quano,

4
È abbastanza semplice, @Quano. Crea un nuovo file .user.js, scrivi lo script e trascinalo sul browser per installarlo. La limitazione nel richiedere script esterni è presente solo se si crea lo script dall'interfaccia utente di Greasemonkey, ma non è necessario utilizzare Greasemonkey per creare il file di script. È possibile modificare lo script dopo l'installazione, ma se si desidera aggiungere nuove @requiredirettive, è necessario disinstallare e reinstallare lo script affinché abbia effetto.
Rob Kennedy,

81

Se vuoi usare jQuery su un sito in cui è già incluso, questa è la strada da percorrere (ispirata a BrunoLM):

var $ = unsafeWindow.jQuery;

So che questo non era l'intento originale della domanda, ma sta diventando sempre più un caso comune e non lo hai escluso esplicitamente. ;)


4
Apparentemente non supportato in Chrome - chromium.org/developers/design-documents/user-scripts
Ashley

Funziona in Scriptish di Firefox!
Gqqnbig

2
Vorrà provare che non ce l'hai già in questo modo: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } in Chrome, un sito Jquery sarà già disponibile.
Jonathon

Hmm. Ricevo un errore davvero strano quando lo utilizzo. Si alert($('.submit_entry').length);tratta sia di errori che di invio dell'avviso appropriato, allo stesso tempo.
Jonathon

21

Non c'è assolutamente nulla di sbagliato nell'includere jQuery nel tuo script Greasemonkey. Basta prendere la fonte e posizionarla nella parte superiore dello script utente. Non è necessario creare un tag di script, poiché stai già eseguendo JavaScript!

L'utente scarica comunque lo script solo una volta, quindi la dimensione dello script non è una grande preoccupazione. Inoltre, se vuoi che il tuo script Greasemonkey funzioni in ambienti non GM (come gli script utente GM-esque di Opera o Greasekit su Safari), ti aiuterà a non usare costrutti unici GM come @require.


7

La soluzione di Rob è quella giusta: usa @requirela libreria jQuery e assicurati di reinstallare lo script in modo che la direttiva venga elaborata.

Una cosa che penso valga la pena aggiungere è che puoi usare jQuery normalmente dopo averlo incluso nel tuo script, ad eccezione dei metodi AJAX . Per impostazione predefinita, jQuery cerca XMLHttpRequest, che non esiste nel contesto di Greasemonkey. Ho scritto di una soluzione alternativa in cui si crea un wrapper per GM_xmlhttpRequest (la versione Greasemonkey di XHR) e si utilizza jQuery ajaxSetup()per specificare la versione di wrapping come predefinita. Una volta fatto, puoi usare $.gete $.postcome al solito.

Potresti anche avere problemi con jQuery $.getJSONperché carica JSONP usando i <script>tag. Questo porta ad errori perché jQuery definisce la funzione di callback nell'ambito della finestra di Greasemonkey e gli script caricati cercano il callback nell'ambito della finestra principale. La soluzione migliore è utilizzare $.getinvece e analizzare il risultato con JSON.parse().


4

Puoi creare un nuovo script usando il Nuovo script utente in Greasemonkey ma devi modificare il file config.xml nella cartella gm_scripts.

Il tuo file config.xml dovrebbe avere una sintassi simile a questa:

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

Si noti il <Require>tag.

Nel tuo script puoi usare la sintassi jQuery diretta. Assicurati di avere il tag richiesto nell'intestazione Greasemonkey. Ecco un esempio di 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!");
});

Ricorda che dopo aver modificato config.xml devi riavviare il browser affinché Greasemonkey ricarichi nuovamente le impostazioni.

Inoltre, è necessario copiare il file jquery.js nella cartella della directory dello script affinché funzioni. Ho provato questo, e funziona solo se effettivamente copi il file manualmente lì.

Felice jQuerying!


4

Aggiornamento : come dice il commento qui sotto, questa risposta è obsoleta.

Come altri hanno già detto, @require viene eseguito solo quando lo script è stato installato. Tuttavia, dovresti anche notare che attualmente jQuery 1.4. * Non funziona con greasemonkey. Puoi vedere qui per i dettagli: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Dovrai usare jQuery 1.3.2 fino a quando le cose non cambieranno.


3
Questa risposta è obsoleta a partire dalla versione GM 0.9 o successive.
Brock Adams,

3
@Brock: perché? Puoi spiegarci i nomi?
Trevor Sullivan,



1

Potresti ottenere Component unavailablese importi direttamente lo script jQuery.

Forse è di questo che parlava @Conley ...

Puoi usare

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

che è una versione modificata per funzionare su Greasemonkey e quindi ottenere l'oggetto jQuery

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

Mi rendo conto che questo è di 5 anni, ma mi chiedo: non è sbagliato ottenere l'oggetto jQuery come se fosse già stato definito sulla pagina, riferendosi ad esso come unsafeWindow.jQuery?
jj_

0

@requireNON viene elaborato solo alla prima installazione dello script! Secondo le mie osservazioni, viene processato il primo tempo di esecuzione! Quindi puoi installare uno script tramite il comando di Greasemonkey per creare uno script nuovo di zecca. L'unica cosa di cui devi preoccuparti è che non sia stata attivata la ricarica della pagina, prima di aggiungere la @requireparte. (e salva il nuovo script ...)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.