Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript greasemonkey将onclick事件添加到按钮_Javascript_Greasemonkey - Fatal编程技术网

Javascript greasemonkey将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

我将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); 

}
使用


您的
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);
}