javascript - 使用用户脚本时如何检测鼠标点击?

标签 javascript jquery greasemonkey userscripts tampermonkey

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

function removeSth(){

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

遗憾的是,它不起作用。它是这样说的:

ReferenceError: $ is not defined

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

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

最佳答案

用户脚本和大多数 Greasemonkey 脚本在沙箱中运行。因此,脚本需要加载 jQuery(您的代码正在使用的 $ 对象)本身,或者它需要注入(inject)代码以使用目标页面的 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 ();

关于javascript - 使用用户脚本时如何检测鼠标点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814773/

相关文章:

Javascript:只读取大型服务器文本文件的最后 x 行

javascript:站点将对象传递给 setinterval

javascript - 鼠标悬停时在 iframe 中显示源 html

javascript - 默认情况下,Vuetify 为所有 v-text-field 设置概述

javascript - 显示/隐藏弹出窗口之间的对应关系

javascript - Jcrop 裁剪图像无法正常工作,裁剪了错误的部分

javascript - 更新每 5 个 td

javascript - jQuery 1.7.2 - selector.val() 在 IE 8 中中断

javascript - 将 Firefox 30 之前的 Greasemonkey 脚本迁移到 GM4+ 时,如何替换 unsafeWindow?

javascript - 如何更改雅虎邮箱、注销 URL?