Як можна використовувати jQuery в Greasemonkey?


234

Я спробував поставити цю лінію, але вона не працює:

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

jQuery взагалі не працює в Greasemonkey. Чи є інший спосіб використовувати jQuery в Greasemonkey?

-

Для всіх людей, які мають одну і ту ж проблему, потрібно завантажити файл у жиру, а потім встановити його звідти.

Параметр Створити новий сценарій не працює!


14
@Jorge, ти не знав, що на цьому веб-сайті немає абсолютно ніякої магії? Ви можете переглядати все, що завгодно, з розширенням файлу .user.js, і Greasemonkey запитає, чи бажаєте ви його встановити. Це включає файли на вашому локальному комп’ютері. Встановити будь-який скрипт так само просто, як перетягнути його у свій браузер.
Роб Кеннеді

5
Схоже, це зараз добре працює навіть під час редагування файлу після встановлення.
Йозеф Сабл

6
Йозеф правий - з версії 0.9.0 Greasemonkey тепер встановить @required файли, як тільки файл буде відредагований.
Rory O'Kane

1
Також не забудьте все ще використовувати $(document).ready(function() {...});у своєму коді
Користувач

1
Найпростіший спосіб оновити вас @requires- додати хеш-рядок або запит до кінця @requireвисловлювання та змінювати його, коли воно потребує оновлення. Подібно до того, як ви "кешбюрували" фавікон. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Відповіді:


189

Можливо, у вас немає достатньо нової версії Greasemonkey. Додано версію 0.8 @require.

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

Якщо у вас немає 0,8, використовуйте техніку, яку описує Джоан П'єдра, щоб додати scriptелемент до сторінки вручну .

Між версії 0.8 і 0.9, @requireбуде оброблено лише тоді , коли сценарій спочатку встановлений. Якщо ви зміните список необхідних сценаріїв, вам потрібно видалити свій скрипт та встановити його знову; Greasemonkey завантажує потрібний сценарій один раз при встановленні і після цього використовує кешовану копію.

Станом на 0,9, поведінка Greasemonkey змінилася (щоб вирішити тангенціально пов'язану проблему ), так що тепер вона завантажує необхідні сценарії після кожного редагування; перевстановлення сценарію більше не потрібно.


Роб, Отже, що мені потрібно робити? Я створюю свої сценарії користувачів за допомогою посилання New User Script. Я додаю @require, і він не працював. То як я можу змусити його працювати? Поясніть, будь ласка, я хочу, щоб метод @require працював, тому що він набагато елегантніший, ніж метод елементів сценарію
Кіра Nighly

1
Гаразд, я змусив це працювати. Дякую!!! Я завантажив скрипт у Greasespot і встановив його звідти.
Кейра Ніґлі

2
Я думаю, що коли ви створюєте новий скрипт з Greasemonkey, сценарій встановлюється негайно. Цей сценарій - порожній файл за замовчуванням, а це означає, що ви упустили свій шанс вимагати будь-яких зовнішніх скриптів.
Роб Кеннеді

Тож немає можливості використовувати @require для нового сценарію, який ви створюєте? : /
quano

4
Це досить просто, @Quano. Створіть новий .user.js файл, напишіть у нього свій скрипт, а потім перетягніть його у свій браузер, щоб встановити його. Обмеження щодо необхідності використання зовнішніх скриптів існує лише в тому випадку, якщо ви створюєте скрипт з інтерфейсу користувача Greasemonkey, але немає необхідності використовувати Greasemonkey для створення файлу сценарію. Ви можете редагувати сценарій після його встановлення, але якщо ви хочете додати нові @requireдирективи, вам потрібно буде видалити та перевстановити сценарій, щоб він набув чинності.
Роб Кеннеді

81

Якщо ви хочете використовувати jQuery на сайті, де він уже включений, це шлях (натхненний BrunoLM):

var $ = unsafeWindow.jQuery;

Я знаю, що це не був початковий намір питання, але він все частіше стає загальним випадком, і ви прямо не виключали цю справу. ;)


4
Мабуть, не підтримується в Chrome - Chromeium.org/developers/design-documents/user-scripts
Ешлі

Працює у сценарії Firefox!
Gqqnbig

2
Потрібно перевірити, що у вас його ще немає: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } У Chrome, веб-сайти Jquery вже будуть доступні.
Джонатан

Хм. Я отримую дійсно дивну помилку при використанні цього. Це alert($('.submit_entry').length);одночасно і помилка, і одночасно надсилання відповідного сповіщення.
Джонатан

21

Немає нічого поганого в тому, щоб включити всю повноту jQuery у свій сценарій Greasemonkey. Просто візьміть джерело та розмістіть його у верхній частині вашого сценарію користувача. Не потрібно робити тег сценарію, оскільки ви вже виконуєте JavaScript!

Користувач завантажує сценарій лише один раз, тому розмір сценарію не викликає особливих проблем. Крім того, якщо ви хочете, щоб ваш сценарій Greasemonkey працював у не-GM середовищах (таких як користувацькі сценарії GM-esque Opera або Greasekit на Safari), це допоможе не використовувати унікальні конструкції GM, такі як @require.


7

Рішення Роб є правильним - користуйтеся @requireбібліотекою jQuery і не забудьте перевстановити свій сценарій, щоб директива була оброблена.

Я думаю, що варто додати те, що ви можете використовувати jQuery звичайно після того, як ви включили його у свій сценарій, за винятком методів AJAX . За замовчуванням jQuery шукає XMLHttpRequest, який не існує в контексті Greasemonkey. Я писав про обхідному шляху , де ви створюєте оболонку для GM_xmlhttpRequest (версія Greasemonkey з XHR) і використовувати JQuery - х ajaxSetup()вказати вашу обгорнуту версію за замовчуванням. Після цього ви зможете користуватися $.getі $.postяк завжди.

Також у вас можуть виникнути проблеми з jQuery, $.getJSONоскільки він завантажує JSONP за допомогою <script>тегів. Це призводить до помилок, оскільки jQuery визначає функцію зворотного виклику в області вікна Greasemonkey, а завантажені сценарії шукають зворотний виклик у межах головного вікна. Ваша найкраща ставка - використовувати $.getзамість цього і проаналізувати результат JSON.parse().


4

Ви можете створити новий скрипт за допомогою Нового сценарію користувача в Greasemonkey, але вам потрібно відредагувати файл config.xml всередині папки gm_scripts.

Ваш файл config.xml повинен мати подібний синтаксис, як цей:

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

Помітьте <Require>тег.

У вашому сценарії ви можете використовувати синтаксис прямого jQuery. Переконайтеся, що у заголовку Greasemonkey є тег вимагання. Ось приклад 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!");
});

Пам’ятайте, що після зміни config.xml вам доведеться перезапустити браузер для Greasemonkey, щоб знову завантажити налаштування.

Також зауважте, що вам потрібно скопіювати файл jquery.js у папку каталогу скриптів, щоб це працювало. Я перевірив це, і він працює, лише якщо ви фактично копіюєте файл вручну.

Щасливого jQuerying!


4

Оновлення : Як йдеться в коментарі нижче, ця відповідь застаріла.

Як всі інші сказали, @require запускається лише після встановлення сценарію. Однак слід також зазначити, що в даний час jQuery 1.4. * Не працює з gresemonkey. Тут Ви можете ознайомитись тут: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Вам доведеться використовувати jQuery 1.3.2, поки все не зміниться.


3
Ця відповідь застаріла від версії GM 0.9 або новішої версії.
Брок Адамс

3
@Brock: Чому? Чи можете ви пояснити нам нооби?
Тревор Салліван


2

метаресурсу @require не працює, коли ви хочете від’єднати події на веб-сторінці за допомогою jQuery, ви повинні використовувати бібліотеку jQuery, включену на веб-сторінку, а потім отримати її в Greasemonkey за допомогою Як відключити var $ = unsafeWindow.jQuery; обробники подій jquery у greasemonkey?


1

Ви можете отримати, Component unavailableякщо ви імпортуєте сценарій jQuery безпосередньо.

Можливо, саме про це говорив @Conley ...

Можна використовувати

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

яка є модифікованою версією для роботи над Greasemonkey, а потім отримати об’єкт jQuery

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

Я усвідомлюю, що це 5 років, але просто цікаво: чи не помиляється отримати об’єкт jQuery так, як це було визначено на сторінці, посилаючись на нього як unsafeWindow.jQuery?
jj_

0

@requireце НЕ обробляється тільки коли сценарій перший встановлений! За моїми спостереженнями, це обробляється в перший час виконання! Таким чином, ви можете встановити сценарій за допомогою команди Greasemonkey для створення абсолютно нового сценарію. Єдине, про що ви повинні подбати, це те, щоб не було запущено перезавантаження сторінки, щоб додати цю @requireчастину. (і збережіть новий сценарій ...)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.