如何用GreaseMonkey替换onclick事件?

时间:2012-04-27 10:44:21

标签: javascript greasemonkey

这个网站有一个图像库。每次我点击缩略图时,它都会在新标签页中打开URL(不是因为我设置了firefox以在新标签页中打开链接)。我想在同一个窗口中打开URL。缩略图图像的样子就是这样。

<span class="thumb" id="789">
<a href="/post/image/12345" onclick="return PostMenu.click(12345)">
<img  class="preview" src="http://abc.com/image.jpg" title="title" alt="">
</a>
</span>

我相信onclick="return PostMenu.click(12345)"正在这样做。如何在GreaseMonkey中用我自己的空函数替换PostMenu.click()函数?有没有办法让GreaseMonkey脚本拦截所有onclick事件?

我唯一的选择是浏览所有span课程,并从链接标记中删除onclick="return PostMenu.click(12345)"。但是因为在一个页面上可能有超过一百个,我宁愿不这样做。

1 个答案:

答案 0 :(得分:4)

实际上,删除onclick并不是一项繁重的任务。

使用jQuery,代码只是:

$("span.thumb a").prop ("onclick", null);

或者,对于旧版本的jQuery:

$("span.thumb a").removeAttr ("onclick");

完整的脚本:

// ==UserScript==
// @name     _Kill select onClicks
// @include  http://YOUR_SERVER/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript==

$("span.thumb a").prop ("onclick", null);


这种方法的优点是:
(1)如果您需要,可以保留PostMenu.click(),或者在其他地方保留所需的PostMenu.click() (2)你正在从页面中删除crud,这使得它稍微不那么笨重 (3)我怀疑您可能还需要打开或修改该链接 - 在这种情况下,使用jQuery的目标重写方法是可行的方法。


如果你真的只想用你自己的空函数替换unsafeWindow.PostMenu.click = function () {}; 函数,那么代码就是:

onclick

至于让Greasemonkey拦截所有{{1}}事件......这并不容易可靠。忘记这种方法,除非出于某种原因需要压倒性的(在这种情况下似乎没有)。