2011-08-29 3 views
0

GM을 통해 이미지를 페이지에 추가 했으므로 아무런 소용이없는 클릭 이벤트를 실행하려고합니다.Greasemonkey 스크립트에서 jQuery 클릭 이벤트가 실행되지 않습니다.

내가 누락 된 아이디어가 있습니까?

페이지의 마크 업이 포함되어

<img id="kwdHelp" src="myImage /> 

그리스 몽키/Tampermonkey 스크립트 조각 ...

function jQueryLoaded(){ 
    jQuery('#kwdHelp').click(function(){ 
    alert('clicked show help'); //DOES NOT FIRE 
    }); 

    jQuery(document).bind('DOMNodeInserted', function(event) 
    { 
     if (event && event.target && jQuery(event.target).attr("class") == 'aw-ti-resultsPanel-details') 
     { 
      if (waitToLoad !== null) 
      { 
       window.clearTimeout(waitToLoad); 
      } 
      waitToLoad = window.setTimeout(SearchDomains, 100); 
     } 
    }); 
    setupLoadingImage(); 
}; 


function checkIfjQLoaded() { 
    //if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(checkIfjQLoaded,100); } 
    //else { jQuery = unsafeWindow.jQuery; jQueryLoaded();} 
    jQueryLoaded(); 
}; 

checkIfjQLoaded(); 
+0

jQueryLoaded()가 호출되는시기는 언제입니까? –

+0

더 많은 코드로 질문을 업데이트했습니다.이 스크립트를 수행하기 위해 고용 한 개발자가 수표를 주석 처리 한 것처럼 보입니다. 왜 $ (document) .ready (..)를 사용하지 않습니까? – RegEdit

답변

0

2 개의 정의되지 않은 함수가 실제로 코드의 어딘가에 있다고 가정하면 문제의 코드가 작동해야합니다 (개선이 필요하지만 아래 참조).

문제가되지 않은 것이 잘못되었습니다.

  • 대상 페이지로 연결하십시오.
  • 전체 편집되지 않은 코드를 표시하십시오.
  • 방화 광 콘솔이주는 오류 메시지는 무엇입니까?

checkIfjQLoaded() 당황 할지도 모르 제거하십시오. 그것은 쓸모없고 가난한 실천입니다.

// @require을 사용하여 jQuery를로드하면 스크립트는 기본적으로 document.ready에서 실행됩니다.

코드가 더 간단 할뿐만 아니라 매번 jQuery를 가져올 필요가 없으므로 훨씬 빠르고 효율적입니다.

스크립트가 될 것입니다 :

// ==UserScript== 
// @name  _YOUR_NAME 
// @include http://YOUR_SERVER/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js 
// ==/UserScript== 

$('#kwdHelp').click(function(){ 
    alert('clicked show help'); //DOES NOT FIRE 
}); 

$(document).bind('DOMNodeInserted', function(event) 
{ 
    if (event && event.target && $(event.target).attr("class") == 'aw-ti-resultsPanel-details') 
    { 
     if (waitToLoad !== null) 
     { 
      window.clearTimeout(waitToLoad); 
     } 
     waitToLoad = window.setTimeout(SearchDomains, 100); 
    } 
}); 
setupLoadingImage(); 

function SearchDomains() { 
    //... 
} 

function setupLoadingImage() { 
    //... 
} 


을 마지막으로, 당신은 크롬에서 스크립트를 사용하여 최상의 결과를 Tampermonkey를 설치하려는 경우.

+0

예, Tampermonkey가 Chrome에서 실행 중입니다. FF의 그리스 몽키 – RegEdit

+0

수정 사항은 .live ('click', function() { – RegEdit

1

당신이 그것을에 이벤트를 바인딩하려고 할 때 문서의 요소 존재인가?

나는 보통 그 실수를 스스로합니다.

관련 문제