Javascript greasemonkey将onclick事件添加到按钮
我将onclick事件附加到动态创建的按钮上,但该事件未触发Javascript greasemonkey将onclick事件添加到按钮,javascript,greasemonkey,Javascript,Greasemonkey,我将onclick事件附加到动态创建的按钮上,但该事件未触发 var ind = location.href.indexOf('http://www.example.com/'); function init(){ alert('h'); } if(ind != -1){ var elem = document.createElement("input"); elem.id ='btnGumb'; elem.value = 'Select Check
var ind = location.href.indexOf('http://www.example.com/');
function init(){
alert('h');
}
if(ind != -1){
var elem = document.createElement("input");
elem.id ='btnGumb';
elem.value = 'Select Check box';
elem.type = 'button';
elem.style.position = 'fixed';
elem.style.left = '0px';
elem.style.top = '0px';
//this is not working
elem.setAttribute('onclick', 'init();');
//but alert is working: elem.setAttribute('onclick', 'alert("h");');
document.body.appendChild(elem);
}
使用
您的
init
函数未在内容页窗口中定义,因此您无法将函数名设置为字符串。我没有使用GreaseMonkey,但我猜您的脚本在其自身范围内,并且在脚本运行完后,其所有变量都会被释放。因为您在这个范围内定义init,但是在主页面上调用它,所以调用该函数时它是未定义的
您可以将整个函数放入onclick事件或触发回调:
if (elem.addEventListener) {
elem.addEventListener('click',init,false);
} else {
elem.attachEvent('onclick',init);
}
(附件是IE特有的)在您的回答中,“假”部分的目的是什么?@Rayz321,它与是否使用捕获或冒泡有关。如果您不确定,通常应该使用false/bubbling。较新的浏览器允许省略第三个参数,但我目前不建议这样做。
if (elem.addEventListener) {
elem.addEventListener('click',init,false);
} else {
elem.attachEvent('onclick',init);
}