我尝试将一些功能添加到我每天使用的一些网站上。我想添加一个函数,当我点击某些链接时会删除一些元素。所以我使用 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)
我不知道这些是什么意思,说实话。
答案 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);