jQuery单击事件未在Greasemonkey脚本中触发

时间:2011-08-29 21:42:01

标签: jquery greasemonkey tampermonkey

我已经通过GM将图片附加到页面上,而我正在尝试执行点击事件无效。

我缺少什么想法?

页面标记包含:

<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();

2 个答案:

答案 0 :(得分:1)

当您尝试将事件绑定到文档时,文档中是否存在元素?

我自己经常犯这个错误。

答案 1 :(得分:0)

问题中的代码应该有效(尽管需要改进,见下文),假设2个未定义的函数实际上在某个代码中。

问题中没有的东西是错误的。

  • 链接到目标页面。
  • 显示完整的未经编辑的代码。
  • Firebug控制台提供了哪些错误消息?

摆脱checkIfjQLoaded() malarkey。这是过时和糟糕的做法。

使用// @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以获得最佳效果。