我尝试为我日常使用的一些网站添加一些功能。我想添加一个功能,当我点击某些链接时会删除一些元素。所以我使用 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/