jquery/userscript не определен?

В хроме мой пользовательский скрипт вызывает ошибку

ReferenceError: jQuery is not defined

Но строка @require включает jquery. По крайней мере, я знаю, что это происходит с Greasemonkey (хром не поддерживает это?)

Если я удалю функцию, которая вызывает одну функцию (что делает $ = jQuery), я получаю ошибку $ не определена. В firefox/greasemonkey работает нормально

// ==UserScript==
// @name        Detect Duplicate IDs
// @namespace   jkbfvsdjkzsvfshefsdvh
// @description Alerts you when more than one ID is on a page
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @include     *
// @version     1
// @grant
// ==/UserScript==

//using localhost in @include doesn't seem to work
if(location.hostname!='localhost')
    return;

//Ignore above for console.
(function($){
$(function() {
var checkDupeIDs = function () {
    var dupes = [];
    var ids = [];
    $('[id]').each(function(i,e){ids.push(e.id)});
    var len = ids.length;
    for(i=0; i<len; ++i) {
        if(dupes.indexOf(ids[i])!=-1)
            continue;
        for(n=i+1; n<len; ++n) {
            if (ids[n]==ids[i]) {               
                dupes.push(ids[n]);
                break;
            }
        }
    }
    if (dupes.length!=0) { 
        for(i=0; i<dupes.length; ++i)
            console.warn('Multiple IDs #' + dupes[i]);
        alert(dupes.join('\n')); 
    }
}


var jHtml = $.html;
$.html = function () {
    checkDupeIDs();
    return jHtml.call(this, arguments);
}

checkDupeIDs();

})
})(jQuery);

person BruteCode    schedule 10.04.2013    source источник
comment
Я думаю, вы забыли включить jquery в свой проект   -  person Gaurav    schedule 10.04.2013
comment
У вас есть это включено в вашей странице? пример: <script type="text/javascript" src="javascript/jquery.js"> (Два способа здесь: dabrook.org/ блог/два способа включить-jquery-в-ваш-документ)   -  person valverij    schedule 10.04.2013
comment
@gaurav: @require включает jquery. По крайней мере, так происходит с гриммонки.   -  person BruteCode    schedule 10.04.2013
comment
сценарий, который вы используете, говорит: // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js Итак, вам нужно добавить эту строку в ваш файл. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>   -  person Wasif.Butt    schedule 10.04.2013


Ответы (2)


По умолчанию Chrome не очень хорошо поддерживает скрипты Greasemonkey (Устаревшая таблица, устарела). Например, директива @require не работает.

Чтобы получить почти полную совместимость со скриптами Firefox Greasemonkey, установите расширение Tampermonkey для Chrome. Ваш скрипт должен работать в Tampermonkey.

Кроме того, чтобы избежать проблем в Firefox, не оставляйте @grant пустым. Используйте @grant  GM_addStyle, если ничего другого.

person Brock Adams    schedule 10.04.2013

Проверьте две самые важные вещи:

  1. Вы включили jQuery в свой проект
  2. Вы включили файл jQuery перед любым другим файлом js, использующим jQuery.
person Ali Shah Ahmed    schedule 10.04.2013
comment
@require включает jquery. По крайней мере, так происходит с гриммонки. - person BruteCode; 10.04.2013