greasemonkey将onclick事件添加到按钮

时间:2010-08-04 05:57:33

标签: 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 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); 

}

2 个答案:

答案 0 :(得分:3)

使用addEventListener

elem.addEventListener('click', init, false);

您的init函数未在内容页面窗口中定义,因此您无法将函数名称设置为字符串。

答案 1 :(得分:2)

我没有使用GreaseMonkey,但我猜你的脚本在它自己的范围内,并且在脚本完成运行后释放所有变量。由于您在此范围内定义init,但在主页面上调用它,因此在调用该函数时该函数是未定义的。

您可以将整个函数放在onclick事件中或触发回调:

if (elem.addEventListener) {
  elem.addEventListener('click',init,false);
} else {
  elem.attachEvent('onclick',init);
}

(attachEvent是特定于IE的)