0

我已通过 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();
4

2 回答 2

2

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

我自己通常会犯这个错误。

于 2011-08-29T21:59:41.597 回答
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以获得最佳效果。

于 2011-08-29T23:47:43.917 回答