Jak niektórzy z was mogą wiedzieć, Google Chrome nałożył poważne ograniczenia na skrypty Greasemonkey.
Chromium nie obsługuje
@require
,@resource
,unsafeWindow
,GM_registerMenuCommand
,GM_setValue
, lubGM_getValue
.
Bez wymagania nie mogę znaleźć sposobu na włączenie biblioteki jQuery do skryptu Greasemonkey w Google Chrome.
Czy ktoś ma jakąś radę w tej sprawie?
@require
razie wsparcie , co jest znacznie prostszym podejściem niż te w odpowiedziach.var $ = unsafeWindow.jQuery;
@require
działa świetnie w witrynach, w których nie martwisz się o konflikt z żadną z tysięcy lub milionów innych bibliotek JS, które po załadowaniu wiążą się z $. Jeśli jednak piszesz skrypt dla witryny używającej $ do czegoś innego lub co gorsza piszesz skrypt, który będzie działał w każdej witrynie, użyj stosunkowo bezpiecznego mechanizmu ładowania opisanego poniżej.Odpowiedzi:
Z „Porada dotycząca skryptu użytkownika: Korzystanie z jQuery - Blog Erika Volda”
źródło
script.textContent = "(" + callback.toString() + ")();";
doscript.textContent = "jQuery.noConflict();(" + callback.toString() + ")();";
w moim szablonu skryptu użytkownika, więc nie będzie żadnych zaskakujących konflikty. :)main()
, możesz użyć$.loadScript()
, a następnie uruchomić wszystko inne, gdy loadScript zakończy ładowanie jQueryUI.main
zostanie wykonany w kontekście strony docelowej, co oznacza, że (między innymi) obowiązuje zasada żądań między witrynami strony docelowej - (np. Musiałem wprowadzić ponownie,GM_xmlhttpRequest
zanim zobaczyłem, że tak się stało nie pomóż mi). W końcu po prostu skopiowałem wkleiłem kodjquery.min.js
.Napisałem kilka funkcji opartych na skrypcie Erika Volda, które pomagają mi uruchamiać funkcje, kod i inne skrypty w dokumencie. Możesz ich użyć, aby załadować jQuery na stronę, a następnie uruchomić kod w ramach pliku global
window
.Przykładowe użycie
Możesz kliknąć tutaj aby go zainstalować, jeśli ufasz, że nie próbuję cię nakłonić do zainstalowania czegoś złośliwego i że nikt nie zmodyfikował mojego posta, aby wskazać na coś innego. Załaduj ponownie stronę i powinieneś zobaczyć ramkę wokół mojego postu.
Funkcje
load(url, onLoad, onError)
Ładuje skrypt
url
do dokumentu. Opcjonalnie można przewidzieć wywołania zwrotneonLoad
ionError
.execute(functionOrCode)
Wstawia funkcję lub ciąg kodu do dokumentu i wykonuje go. Funkcje są konwertowane na kod źródłowy przed wstawieniem, więc tracą swój obecny zakres / zamknięcia i są uruchamiane w ramach
window
zakresu globalnego .loadAndExecute(url, functionOrCode)
Skrót; to ładuje skrypt z
url
, a następnie wstawia i wykonuje,functionOrCode
jeśli się powiedzie.Kod
źródło
Używaj jQuery bez obawy o konflikty , dzwoniąc
jQuery.noConflict(true)
. Tak jak to:Ale w przypadku skryptów obsługujących różne przeglądarki, dlaczego nie skorzystać z ładnej, szybkiej, lokalnej kopii jQuery, kiedy tylko możesz?
Poniższe działa jako skrypt użytkownika Chrome i skrypt Greasemonkey i używa ładnej lokalnej
@require
kopii jQuery, jeśli platforma ją obsługuje.źródło
$ = unsafeWindow.jQuery
jeśli strona ma jQuery (przetestowałem to tylko w Tampermonkey).Jeśli strona ma już jQuery, po prostu postępuj zgodnie z tym szablonem:
źródło
if
oświadczeniu, które sprawdzawindow.location
.Prostym sposobem jest użycie
required
słowa kluczowego:źródło
Jest naprawdę łatwy sposób na obejście tego, w tym pełną kopię skryptów jQuery dla Chrome, gdy te skrypty w rzeczywistości nie używają żadnych uprzywilejowanych funkcji ( funkcje GM_ * itp.) ...
Po prostu wstaw sam skrypt do DOM strony i wykonaj! Najlepsze jest to, że ta technika działa równie dobrze w Firefoksie + Greasemonkey, więc możesz użyć tego samego skryptu do obu:
(bez przeprosin skradziony z Shog9 na meta.stackoverflow, ponieważ nie przeniósł go tutaj, a ja muszę usunąć meta post ..)
źródło
Możesz również spakować swój skrypt z rozszerzeniem jQuery do Chrome. Zobacz skrypty zawartości przeglądarki Google Chrome .
Rozszerzenia Chrome, w przeciwieństwie do skryptów Greasemonkey, mogą się automatycznie aktualizować.
źródło
Łatwiejsze rozwiązanie: wytnij i wklej zawartość jquery.min.js w górnej części skryptu użytkownika. Gotowe.
Znalazłem różne problemy z zalecanymi odpowiedziami. Rozwiązanie addJQuery () działa na większości stron, ale na wielu ma błędy. Jeśli napotkasz problemy, po prostu skopiuj i wklej zawartość jquery do swojego skryptu.
źródło
Zastanawiam się, czy nie możesz polegać na
document.defaultView.jQuery
swoim skrypcie GM ala:źródło
Innym podejściem byłoby zmodyfikowanie skryptu w celu ręcznego załadowania jQuery. Przykład z http://joanpiedra.com/jquery/greasemonkey/ :
EDYCJA: DRATS! Po przetestowaniu okazuje się, że ten kod nie działa, ponieważ Google Chrome uruchamia skrypty użytkownika / rozszerzenia w innym zakresie / procesie niż rzeczywista strona internetowa. Możesz pobrać kod jQuery za pomocą XmlhttpRequest, a następnie Eval go, ale musisz hostować kod na serwerze, który umożliwia współdzielenie zasobów między źródłami przy użyciu
Access-Control-Allow-Origin: *
nagłówka. Niestety ŻADNA z obecnych sieci CDN z jQuery nie obsługuje tego.źródło
Idealne rozszerzenie do osadzania jQuery w konsoli Chrome, tak proste, jak możesz sobie wyobrazić. To rozszerzenie wskazuje również, czy jQuery zostało już osadzone na stronie.
To rozszerzenie służyło do osadzania jQuery na dowolnej stronie. Pozwala na użycie jQuery w powłoce konsoli (konsolę Chrome można wywołać klawiszami „Ctrl + Shift + j”).
Aby osadzić jQuery w wybranej zakładce, kliknij przycisk rozszerzenia.
LINK do rozszerzenia: https://chrome.google.com/extensions/detail/gbmifchmngifmadobkcpijhhldeeelkc
źródło