2012-04-27 7 views
6

このウェブサイトには画像ギャラリーがあります。サムネイル画像をクリックするたびに、新しいタブにURLが開きます(新しいタブでリンクを開くためにfirefoxを設定しているわけではありません)。同じウィンドウでURLを開くだけです。サムネイル画像がどのように見えるかの例はこれです。onclickイベントをGreaseMonkeyに置き換える方法は?

<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ページに100以上のものがある可能性があるので、私はそれをやりたいとは思わない。

+0

'PostMenu.click'のコードは' window.open() '以上ですか? – Bergi

答えて

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()機能を交換したい場合は、そのためのコードはちょうどです:Greasemonkeyの切片にすべてonclickイベントを持つためとして

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

...つまり確実に行うのは簡単ではありません。なんらかの理由で圧倒的な必要がなければ、このアプローチを忘れてください(この場合はそうではないようです)。

+0

ちょうど 'prop'スクリプトのために、ページが読み込まれるとすぐに...それはすぐに実行されますか?そしてそれは実際に 'onclick'属性を削除しますか?私はそれをテストし、それはもう新しいタブで開かないが、ソースをチェックしたときに、 'onclick'属性はまだそこにあった。小さな問題の1つは、サイトに自動ページングがあるため、スクロールするたびにサムネイルが生成され、新しく作成されたサムネイルで 'prop'スクリプトが機能しないことです。 2番目のスクリプトは正常に動作します。 – Jack

+0

実際に考えてみると、新しいタブで開く理由は、自動ページングによるものです。これは、押してから最初から読み直さなければならないためです。自動ページングをオフにすると、リンクをクリックすると同じタブが開きます。 – Jack

+0

はい、 'prop'コードは1回だけ起動し、最初のページの読み込み後にAJAXによって追加されたリンクは影響を受けません。表示されるようにスクリプトを作成して 'onclicks'をチェックして削除することはできますが、既に回避策や空の関数のように思えます。 –

関連する問題