jquery / userscript没有定义?

时间:2013-04-10 13:22:57

标签: javascript jquery userscripts

在chrome中,我的用户脚本会导致错误

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

2 个答案:

答案 0 :(得分:2)

直接开箱即用,Chrome不支持Greasemonkey脚本(Out-of-date tableOut-of-date page)。例如,@require指令不起作用。

要享受Firefox Greasemonkey脚本的几乎完全兼容性,请安装the Tampermonkey Extension for Chrome。你的脚本应该在Tampermonkey中工作。

另外,为了避免Firefox中出现问题,请不要将@grant留空。如果没有别的话,请使用@grant  GM_addStyle

答案 1 :(得分:0)

检查两件最重要的事情:

  1. 您已在项目中包含jQuery
  2. 您在使用jQuery的任何其他js文件之前包含了jQuery文件