2012-04-27 65 views
6

這個網站有一個圖像庫。每次點擊縮略圖時,它都會在新選項卡中打開URL(不是因爲我設置了Firefox來打開新選項卡中的鏈接)。我想在同一個窗口中打開網址。縮略圖圖片的例子是這樣的。如何用GreaseMonkey替換onclick事件?

<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)"。但由於單頁上可能有超過一百種,我寧願不這樣做。

+0

'PostMenu.click'的代碼是什麼,比window.open()'多嗎? – Bergi 2012-04-27 10:47:46

回答

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()以防您需要或在其他地方需要,
(2)您正在移除網頁上的粗糙部分,這使得它不易操作。
(3)我懷疑你可能還需要解開或修改那個鏈接 - 在這種情況下,使用jQuery的目標重寫方法是最好的選擇。


如果你真的只是想用自己的空函數替換PostMenu.click()功能,該代碼只是:

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

至於有Greasemonkey的攔截所有onclick事件......這是不容易做到可靠。忘記這種方法,除非由於某種原因而存在壓倒性的需求(在這種情況下似乎並不存在)。

+0

只是想知道,對於'prop'腳本,只要頁面加載......立即執行?它是否真的刪除了'onclick'屬性?我測試了它,並且它不再在新選項卡中打開,但是當我查看源代碼時,「onclick」屬性仍然存在。一個小問題是,該網站有自動分頁,因此我向下滾動,會生成更多縮略圖,因此'prop'腳本不適用於新填充的縮略圖。第二個腳本雖然工作正常。 – Jack 2012-04-27 11:46:37

+0

實際上,考慮到它,我猜它在新選項卡中打開的原因是由於自動分頁,因爲按回來使它必須從頭開始重新加載。關閉自動分頁功能,單擊鏈接將在同一選項卡中打開。 – Jack 2012-04-27 11:50:40

+0

是的,'prop'代碼只觸發一次,並且在初始頁面加載後AJAX添加的鏈接不受影響。您可以製作一個腳本來檢查並移除出現的「onclicks」,但聽起來您已經有了解決方法和/或空函數方法。 – 2012-04-27 12:04:21