2012-04-27 3 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)"을 제거하는 것입니다. 하지만 한 페이지에 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() 기능을 대체 할 경우, 해당하는 코드는 다음과 같습니다

모든 onclick 이벤트 그리스 몽키 절편을 가진 관해서는
unsafeWindow.PostMenu.click = function() {}; 

가 ... 즉 안정적으로하기가 쉽지 않습니다. 어떤 이유로 든 압도적 인 필요가없는 한이 접근 방식을 잊어 버리십시오. (이 경우에는 보이지 않습니다.)

+0

'prop' 스크립트의 경우, 페이지가로드되자 마자 바로 실행됩니까? 그리고 실제로'onclick' 속성을 제거합니까? 나는 그것을 테스트했고 더 이상 새 탭에서 열리지 않지만 소스를 확인할 때'onclick' 속성이 그대로 남아 있습니다. 하나의 사소한 문제는 사이트에 자동 페이징이있어서 스크롤 다운 할 때 더 많은 축소판이 생성되어'prop' 스크립트가 새로 채워진 축소판에 작동하지 않는다는 것입니다. 두 번째 스크립트는 제대로 작동합니다. – Jack

+0

실제로 생각해 보면, 새 탭에서 열리는 이유는 자동 페이징 때문이었습니다. 다시 누르면 처음부터 다시로드해야하기 때문입니다. 자동 페이징을 끄면 같은 탭에서 링크를 클릭하면 열립니다. – Jack

+0

예, 'prop' 코드는 한 번만 실행되고 초기 페이지로드 후에 AJAX에 의해 추가 된 링크는 영향을받지 않습니다. 스크립트는 스크립트를 만들어서 나타나는 'onclicks'를 확인하고 제거 할 수 있지만 이미 해결 방법 및/또는 빈 함수 접근법을 사용하고있는 것처럼 들립니다. –

관련 문제