Почему этот скрипт Greasemonkey не работает с этим плагином jQuery?

Я использую NinjaKit в Safari (такой же, как Greasemonkey). Коды такие

// ==UserScript==
// @name          demo
// @namespace     http://dailymed.nlm.nih.gov/
// @include       http://dailymed.nlm.nih.gov/dailymed/*
// @require      http://code.jquery.com/jquery-1.11.0.min.js
// @require      http://johannburkard.de/resources/Johann/jquery.highlight-4.closure.js
// ==/UserScript==
$(document).ready(function () {
    document.title = 'Hello!' + document.title;
    alert("ZaiJian");

    $("body p").highlight(["a"]);
});

Когда я посещаю эту страницу, alert может отображаться хорошо, но .highlight функция, которая зависит от jQuery.highlight а также jQuery не работает Это говорит:

TypeError: 'undefined' is not a function (evaluating 'c.toUpperCase()')

И я нахожу это довольно трудно отладить это.. У кого-нибудь есть идеи по этому поводу?

2 ответа

Решение

Я считаю, что NinjaKit в настоящее время не выполняет @require. Вот пример, который я сделал, который работает в Firefox/GreaseMonkey, а не в Safari/Ninjakit:

// ==UserScript==
// @name           DEBUG
// @include       http://localhost/Library.html
// @require  file:///Users/#######/Sites/hello_world.js 
// @require  http://localhost/~#######/hello_world.js  // EITHER WAY
// ==/UserScript==
alert('activated');
hello_world();

# hello_world.js

function hello_world(){
    alert('Hello World!');
}

Будь то "удаленный" адрес или локальный файл, он отлично работал в GreaseMonkey и не работал в Safari. По моему опыту, в настоящее время трудно получить все подробности о NinjaKit.

Вам нужно прочитать соответствующие документы перед использованием плагина jQuery.

Первый,

Создайте запись в своей таблице стилей для класса подсветки.

.highlight {background-color: yellow}

В Greasemonkey, эквивалент этого GM_addStyle('.highlight { background-color: yellow }');,

Во-вторых,

Чтобы выделить все вхождения "bla" (без учета регистра) во всех элементах li, используйте следующий код:

. $('Ли') выделить ('бла');

Вы должны были опустить скобки, т.е. $("body p").highlight("a");,

В-третьих, я не думаю, что вам нужно $(document).ready() поскольку сценарии Greasemonkey по умолчанию выполняются при событии DOMContentLoaded.

Собираем все вместе:

// ==UserScript==
// @name          demo
// @namespace     http://dailymed.nlm.nih.gov/
// @include       http://dailymed.nlm.nih.gov/dailymed/*
// @require       http://code.jquery.com/jquery-1.11.0.min.js
// @require       http://johannburkard.de/resources/Johann/jquery.highlight-4.closure.js
// @grant         GM_addStyle
// ==/UserScript==
GM_addStyle('.highlight { background-color: yellow }');
document.title = 'Hello!' + document.title;
$("body p").highlight("a");
Другие вопросы по тегам