1

我尝试为我每天使用的一些网站添加一些功能。我想添加一个功能,当我点击某些链接时会删除一些元素。所以我使用Tampermonkey并尝试测试以下代码:

function removeSth(){

    $('a').click(function(){
        alert ("warning");
        return false;
    });
}
removeSth();

可悲的是,它不起作用。这就是它所说的:

ReferenceError: $ 未定义

在 removeUsers (eval at (eval at eventHandler (eval at <anonymous> (chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/content.js:56:21))), <anonymous>:65:5)

老实说,我不知道这些是什么意思。

4

3 回答 3

2

用户脚本和大多数 Greasemonkey 脚本在沙箱中运行。因此,脚本需要自行加载 jQuery($您的代码正在使用的对象),或者需要注入代码以使用目标页面的 jQuery 版本。

在跨浏览器脚本中使用 jQuery 的最佳方式是通过这种令人惊叹的绝妙方法。(^_^)

因此,您的脚本将变为:

// ==UserScript==
// @name     _Mouse-click detect
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_info
// ==/UserScript==

function GM_main ($) {
    function removeSth () {
        $('a').click (function () {
            alert ("warning");
            return false;
        } );
    }
    removeSth ();
}

if (typeof GM_info !== "undefined") {
    GM_main ($);
}
else {
    add_jQuery (GM_main);
}

function add_jQuery (callbackFn, jqVersion) {
    var jqVersion   = jqVersion || "1.7.2";
    var D           = document;
    var targ        = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    var scriptNode  = D.createElement ('script');
    scriptNode.src  = 'http://ajax.googleapis.com/ajax/libs/jquery/'
                    + jqVersion
                    + '/jquery.min.js'
                    ;
    scriptNode.addEventListener ("load", function () {
        var scriptNode          = D.createElement ("script");
        scriptNode.textContent  =
            'var gm_jQuery  = jQuery.noConflict (true);\n'
            + '(' + callbackFn.toString () + ')(gm_jQuery);'
        ;
        targ.appendChild (scriptNode);
    }, false);
    targ.appendChild (scriptNode);
}




但是,对于 Firefox-Greasemonkey 和 Tampermonkey,您可以将脚本简化为:

// ==UserScript==
// @name     _Mouse-click detect
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_info
// ==/UserScript==

function removeSth () {
    $('a').click (function () {
        alert ("warning");
        return false;
    } );
}
removeSth ();
于 2012-10-10T08:47:50.110 回答
0

你必须在你的用户脚本中包含 jQuery。userscripts.com 上有许多用户脚本版本的 jQuery,您可以@require使用它们。

虽然只是为了检测点击,但使用addEventListener起来要轻得多。

顺便说一句:您确实需要学习阅读错误消息。

ReferenceError: $ is not defined

告诉你你需要知道的一切。

于 2012-10-10T08:17:13.153 回答
0

如果站点已经有 jQuery.why 加载另一个 jquery 库,请使用它,如下所示。我也使用 jq 而不是 $ 因为我已经在许多站点中看到了问题,它更安全,但又是可选的。

    // ==UserScript==
    // @name           jquery usage
    // @namespace      zevy_boy
    // @include        http://www.wwe.com/*
    // ==/UserScript==

    function jqx(){
    jq=jQuery;
    //todo
    }



    var head= document.body;
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.text= jqx.toString()+"jhqx();";
    head.appendChild(script);
于 2012-10-10T09:14:09.503 回答