Javascript 如何用GreaseMonkey替换onclick事件?
这个网站有一个图片库。每次我点击缩略图时,它都会在一个新的选项卡中打开URL(这不是因为我将firefox设置为在新选项卡中打开链接)。我只想在同一个窗口中打开URL。缩略图图像的外观示例如下所示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.
<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
,但听起来您已经找到了解决方法和/或空函数方法。