greasemonkey добавляет событие onclick к кнопке - PullRequest
5 голосов
/ 04 августа 2010

Я прикрепляю событие 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 ]

3 голосов
/ 04 августа 2010

Использование addEventListener.

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

Ваша функция init не определена в окне страницы содержимого, поэтому вы не можете установить имя функции в виде строки.

2 голосов
/ 04 августа 2010

Я не работал с GreaseMonkey, но, полагаю, ваш скрипт находится в отдельной области видимости, и все его переменные освобождаются после завершения работы скрипта. Поскольку вы определяете init в этой области, но затем вызываете его на главной странице, функция не определяется при вызове.

Вы можете поместить всю функцию в событие onclick или вызвать обратный вызов:

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

(attachEvent зависит от IE)

...