2011-08-29 48 views
0

我已經通過GM將圖像附加到頁面,並且我試圖執行單擊事件無濟於事。在Greasemonkey腳本中沒有觸發jQuery單擊事件

任何想法我失蹤?

頁標記包含:

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

的Greasemonkey/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個未定義的函數真的在代碼中。

某些不在問題中的是錯誤的。

  • 鏈接到目標頁面。
  • 顯示未經編輯的完整編碼。
  • Firebug控制檯會提供哪些錯誤消息?

擺脫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() { 
    //... 
} 


最後,如果你想使用腳本在Chrome,安裝Tampermonkey以獲得最佳效果。

+0

是的,我有Tampermonkey在Chrome中運行。 FF中的Greasemonkey – RegEdit

+0

解決方法是追加.live('click',function(){ – RegEdit

1

出現在當您嘗試綁定事件給它的時間在文檔中的元素?

我通常自己犯這個錯誤。