如何用GreaseMonkey替换onclick事件?

Jac*_*ack 6 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Bro*_*ams 4

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

使用 jQuery,代码将仅为:

$("span.thumb a").prop ("onclick", null);
Run Code Online (Sandbox Code Playgroud)

或者,对于旧版本的 jQuery:

$("span.thumb a").removeAttr ("onclick");
Run Code Online (Sandbox Code Playgroud)

一个完整的脚本:

// ==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);
Run Code Online (Sandbox Code Playgroud)


这种方法的优点是:
(1)您可以保留PostMenu.click()它以备不时之需,或者在其他地方需要它,
(2)您可以从页面中删除CRUD,这使得它稍微不那么笨拙。
(3) 我怀疑您可能还需要解开或修改该链接——在这种情况下,使用 jQuery 的有针对性的重写方法是可行的方法。


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

unsafeWindow.PostMenu.click = function () {};
Run Code Online (Sandbox Code Playgroud)

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