Jak mogę używać jQuery w Greasemonkey?

234

Próbowałem umieścić tę linię, ale to nie działa:

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

jQuery w ogóle nie działa w Greasemonkey. Czy istnieje inny sposób korzystania z jQuery w Greasemonkey?

-

Dla wszystkich osób, które mają ten sam problem, musisz przesłać plik do punktu dostępu, a następnie zainstalować go stamtąd.

Opcja Utwórz nowy skrypt nie działa!

Keira Nighly
źródło
14
@Jorge, czy nie wiedziałeś, że na tej stronie nie ma absolutnie żadnej magii? Możesz przeglądać dowolne pliki z rozszerzeniem .user.js, a Greasemonkey zapyta, czy chcesz je zainstalować. Dotyczy to plików na komputerze lokalnym. Instalowanie dowolnego skryptu jest tak proste, jak przeciąganie go do przeglądarki.
Rob Kennedy,
5
Wygląda na to, że teraz działa dobrze nawet podczas edycji pliku po instalacji.
Josef Sábl
6
Josef ma rację - od wersji 0.9.0 Greasemonkey zainstaluje teraz @ wymagane pliki, jak tylko plik zostanie poddany edycji.
Rory O'Kane,
1
Nie zapomnij również o dalszym używaniu $(document).ready(function() {...});w swoim kodzie
użytkownik
1
Najłatwiejszym sposobem na odświeżenie @requiresjest dodanie skrótu lub kwerendy na końcu @requireinstrukcji i zmienianie go za każdym razem, gdy wymaga aktualizacji. Podobne do sposobu, w jaki „cachebust” favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Odpowiedzi:

189

Być może nie masz wystarczająco nowej wersji Greasemonkey. Dodano wersję 0.8 @require.

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

Jeśli nie masz 0,8, skorzystaj z techniki opisanej przez Joan Piedra w celu ręcznego dodania scriptelementu do strony .

Pomiędzy wersją 0.8 a 0.9 @requirejest przetwarzany tylko przy pierwszej instalacji skryptu. Jeśli zmienisz listę wymaganych skryptów, musisz odinstalować skrypt i zainstalować go ponownie; Greasemonkey pobiera wymagany skrypt raz podczas instalacji, a następnie używa kopii w pamięci podręcznej.

Od wersji 0.9 zachowanie Greasemonkey zmieniło się (w celu rozwiązania problemu związanego ze styczną ), tak że teraz ładuje wymagane skrypty po każdej edycji; ponowna instalacja skryptu nie jest już konieczna.

Rob Kennedy
źródło
Rob, więc co muszę zrobić? Tworzę skrypty użytkownika za pomocą linku Nowy skrypt użytkownika. Dodałem @require i to nie działało. Jak mogę to zrobić? Wyjaśnij, że chcę, aby metoda @require działała, ponieważ jest znacznie bardziej elegancka niż metoda elementu skryptu
Keira Prawie
1
Ok, więc sprawiłem, że działało. Dzięki!!! Przesłałem skrypt w Greasespot i stamtąd go zainstalowałem.
Keira Niemal
2
Wyobrażam sobie, że kiedy tworzysz nowy skrypt z poziomu Greasemonkey, skrypt jest instalowany natychmiast. Ten skrypt jest domyślnym pustym plikiem, co oznacza, że ​​straciłeś szansę na zażądanie zewnętrznych skryptów.
Rob Kennedy
Więc nie ma możliwości użycia @require w nowym skrypcie, który tworzysz? : /
quano
4
To dość proste, @Quano. Utwórz nowy plik .user.js, napisz w nim skrypt, a następnie przeciągnij go do przeglądarki, aby go zainstalować. Ograniczenie wymagające zewnętrznych skryptów jest obecne tylko wtedy, gdy tworzysz skrypt z poziomu interfejsu użytkownika Greasemonkey, ale nie ma wymogu, że musisz użyć Greasemonkey do utworzenia pliku skryptu. Możesz edytować skrypt po jego zainstalowaniu, ale jeśli chcesz dodać nowe @requiredyrektywy, musisz odinstalować i ponownie zainstalować skrypt, aby zadziałał.
Rob Kennedy
81

Jeśli chcesz użyć jQuery na stronie, na której jest już uwzględniony, jest to odpowiedni sposób (zainspirowany przez BrunoLM):

var $ = unsafeWindow.jQuery;

Wiem, że nie było to pierwotnym celem pytania, ale staje się coraz bardziej powszechnym przypadkiem i nie wykluczyłeś go wyraźnie. ;)

Henrik Heimbuerger
źródło
4
Najwyraźniej nieobsługiwany w Chrome - chromium.org/developers/design-documents/user-scripts
Ashley,
Działa w Scriptish Firefoksa!
Gqqnbig,
2
Będzie chciał przetestować, że jeszcze go nie masz: w if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } Chrome witryna Jquery będzie już dostępna.
Jonathon,
Hmm Podczas używania tego pojawia się naprawdę dziwny błąd. Jest alert($('.submit_entry').length);to zarówno błąd, jak i wysłanie odpowiedniego ostrzeżenia w tym samym czasie.
Jonathon
21

Nie ma absolutnie nic złego w włączeniu całego jQuery do skryptu Greasemonkey. Po prostu weź źródło i umieść je na górze skryptu użytkownika. Nie musisz tworzyć tagu skryptu, ponieważ już uruchamiasz JavaScript!

Użytkownik i tak pobiera skrypt tylko raz, więc rozmiar skryptu nie stanowi dużego problemu. Ponadto, jeśli kiedykolwiek chcesz, aby skrypt Greasemonkey działał w środowiskach innych niż GM (takich jak skrypty użytkownika GM w wersji Opera lub Greasekit w przeglądarce Safari), pomoże to nie używać unikatowych dla GM konstrukcji, takich jak @require.

Dan Lew
źródło
7

Rozwiązanie Roba jest właściwe - użyj @requirez biblioteką jQuery i koniecznie zainstaluj ponownie skrypt, aby dyrektywa została przetworzona.

Jedną rzeczą, którą moim zdaniem warto dodać, jest to, że możesz używać jQuery normalnie po włączeniu go do skryptu, z wyjątkiem metod AJAX . Domyślnie jQuery szuka XMLHttpRequest, który nie istnieje w kontekście Greasemonkey. Pisałem o obejście gdzie można utworzyć otoki dla GM_xmlhttpRequest (wersja Greasemonkey od XHR) i wykorzystać jQuery ajaxSetup()aby określić owinięte wersję jako domyślną. Gdy to zrobisz, możesz użyć $.geti $.postjak zwykle.

Możesz również mieć problemy z jQuery, $.getJSONponieważ ładuje JSONP za pomocą <script>znaczników. Prowadzi to do błędów, ponieważ jQuery definiuje funkcję wywołania zwrotnego w zakresie okna Greasemonkey, a załadowane skrypty szukają wywołania zwrotnego w zakresie okna głównego. Najlepiej jest użyć $.getzamiast tego i przeanalizować wynik JSON.parse().

Ryan
źródło
4

Możesz utworzyć nowy skrypt za pomocą nowego skryptu użytkownika w Greasemonkey, ale musisz edytować plik config.xml w folderze gm_scripts.

Twój plik config.xml powinien mieć podobną składnię jak ta:

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

Zwróć uwagę na <Require>tag.

W swoim skrypcie możesz użyć bezpośredniej składni jQuery. Upewnij się, że masz wymagany tag w nagłówku Greasemonkey. Oto przykład 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!");
});

Pamiętaj, że po zmodyfikowaniu pliku config.xml musisz ponownie uruchomić przeglądarkę, aby Greasemonkey ponownie załadował ustawienia.

Pamiętaj również, że musisz skopiować plik jquery.js do folderu katalogu skryptów, aby to zadziałało. Przetestowałem to i działa tylko wtedy, gdy faktycznie skopiujesz plik ręcznie.

Szczęśliwego jQuerying!

Auspex
źródło
4

Aktualizacja : Jak mówi poniższy komentarz, ta odpowiedź jest nieaktualna.

Jak wszyscy powiedzieli, @require jest uruchamiane tylko po zainstalowaniu skryptu. Jednak należy również zauważyć, że obecnie jQuery 1.4. * Nie działa z fatmonkey. Możesz zobaczyć tutaj szczegóły: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Będziesz musiał używać jQuery 1.3.2, aż wszystko się zmieni.

Conley Owens
źródło
3
Ta odpowiedź jest nieaktualna od wersji GM 0.9 lub nowszej.
Brock Adams,
3
@Brock: Dlaczego? Czy możesz nam wytłumaczyć nooby?
Trevor Sullivan
1

Możesz to uzyskać, Component unavailablejeśli bezpośrednio zaimportujesz skrypt jQuery.

Może o tym mówiła @Conley ...

Możesz użyć

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

która jest zmodyfikowaną wersją do pracy na Greasemonkey, a następnie pobierz obiekt jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
BrunoLM
źródło
Zdaję sobie sprawę, że to 5 lat, ale tylko się zastanawiam: czy nie jest źle uzyskać obiekt jQuery, tak jak został on już zdefiniowany na stronie, nazywając go niebezpiecznymWindow.jQuery?
jj_
0

@requireNIE jest przetwarzany tylko przy pierwszej instalacji skryptu! Z moich obserwacji wynika, że ​​jest on przetwarzany przy pierwszym wykonaniu! Więc można zainstalować za pomocą polecenia skryptu Greasemonkey dla tworzenia skryptu nowiuteńki. Jedyną rzeczą, na którą musisz uważać, jest to, że nie zostanie uruchomione ponowne ładowanie strony, zanim dodasz @requireczęść. (i zapisz nowy skrypt ...)

Dunstkreis
źródło