我已经通过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();
答案 0 :(得分:1)
当您尝试将事件绑定到文档时,文档中是否存在元素?
我自己经常犯这个错误。
答案 1 :(得分:0)
问题中的代码应该有效(尽管需要改进,见下文),假设2个未定义的函数实际上在某个代码中。
问题中没有的东西是错误的。
摆脱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以获得最佳效果。