如何在使用用户脚本时检测鼠标单击?

时间:2012-10-10 08:07:48

标签: javascript jquery greasemonkey userscripts tampermonkey

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

function removeSth(){

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

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

  

ReferenceError:$未定义

     

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

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

3 个答案:

答案 0 :(得分:2)

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

在跨浏览器脚本中使用jQuery的最佳方法是通过this stunningly brilliant method。 (^ _ ^)

因此,您的脚本将成为:

// ==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 ();

答案 1 :(得分:0)

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

虽然只是检测一次点击,但使用addEventListener的重量要轻得多。

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

ReferenceError: $ is not defined

告诉你需要知道的一切。

答案 2 :(得分: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);