Javascript 如何用GreaseMonkey替换onclick事件?

Javascript 如何用GreaseMonkey替换onclick事件?,javascript,greasemonkey,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.

这个网站有一个图片库。每次我点击缩略图时,它都会在一个新的选项卡中打开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中自己的空函数替换
postmenus.click()
函数?有没有办法让GreaseMonkey脚本拦截所有onclick事件


我唯一的其他选择是浏览所有
span
类,并从链接标记中删除
onclick=“return PostMenu.click(12345)”
。但是,由于一页上可能有上百个这样的内容,我宁愿不这样做。

实际上,删除
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。如果需要,请单击()
,或者在其他地方需要它,
(2) 您正在从页面中删除crud,这只会使页面稍微不那么笨重。
(3) 我怀疑您可能还需要打开或修改该链接——在这种情况下,使用jQuery的有针对性的重写方法就是最好的选择


如果您真的只想用自己的空函数替换
PostMenu.click()
函数,则代码如下:

unsafeWindow.PostMenu.click = function () {};

至于让Greasemonkey截取所有
onclick
事件。。。要可靠地做到这一点并不容易。忘记这种方法吧,除非出于某种原因(在本例中,似乎没有这种原因)有压倒性的需求。

PostMenu的代码是什么。单击,它是否比window.open()更重要呢??只是想知道,对于
道具
脚本,一旦页面加载。。。是否立即执行?它是否确实删除了
onclick
属性?我测试了它,它不再在新选项卡中打开,但是当我检查源代码时,
onclick
属性仍然存在。一个小问题是,该站点具有自动分页功能,因此当我向下滚动时,会生成更多的缩略图,因此
prop
脚本无法在新填充的缩略图上工作。第二个脚本工作得很好。实际上,仔细想想,我猜它在新选项卡中打开的原因是因为自动分页,因为按“后退”键使它必须从一开始就重新加载。关闭自动分页,单击链接将在同一选项卡中打开。是的,
prop
代码只触发一次,并且在初始页面加载后由AJAX添加的链接不会受到影响。您可以创建一个脚本来检查和删除出现的
onclick
,但听起来您已经找到了解决方法和/或空函数方法。