Скриптик GreasMonkey
Всем привет!
Пытаюсь написать маленький скриптик для Firefox
function alertsms(){
alert("Hello");
}
var logo = document.createElement("div");
logo.className='div_one';
logo.innerHTML = '<div><form><input style="margin: 350px 0 0 0; position: absolute; left: 10px; z-index: 10" type=button name="farm" value="Собрать ресурсы" onClick=alertsms()></form></div>';
document.body.insertBefore(logo, document.body.firstChild);
По нажатию кнопки нужно чтобы вызывалась функция alertsms, а она никак не срабатывает... Ткните носом, пожалуйста, где проблема... PS Эт омой первый скрипт... |
Код:
onClick=alertsms() |
Каких скобок? У меня же есть скобки. Функция так и не срабатывает. Может в GreasMonkey как-то по особому нужно функции оборачивать?
|
Ребята, помогите, пожалуйста! Ну как внедрять функции в GreasMonkey, без них же никуда!
|
Вот тут хорошо описано про ваше расширение и его скрипты Тык
|
Я это читал еще перед написанием скрипта. Сам greasmonkey у меня работает, не получается именно вызвать функцию при нажатии onClick
|
Попробуй такой вариант:
(function(){
function alertsms(){
alert("Hello");
}
document.body.insertAdjacentHTML('afterbegin', '<div class="div_one"><form><input style="margin: 350px 0 0 0; position: absolute; left: 10px; z-index: 10" type="button" name="farm" value="Собрать ресурсы"></form></div>');
document.querySelector('.div_one [name="farm"]').onclick = alertsms;
})()
|
etc.,
Так сработало! Можешь рассказать почему? Функция в функции или что это??? |
ArtemKrass,
Полагаю, что в данном случае работает "песочница", которую предоставляет гризманки пользовательским скриптам из соображений безопасности (подробнее тут - Greasemonkey_Manual:Environment). Т.е. напрямую, через html, обработчик назначить нельзя:
function alertsms(){alert("Hello");}
element.innerHTML = '...<input ... onсlick="alertsms()">...';
Это можно обойти хаком:
unsafeWindow.alertsms = function(){alert("Hello");}
element.innerHTML = '...<input ... onсlick="alertsms()">...';
Но логичнее и безопаснее привязать обработчик c помощью js:
function alertsms(){alert("Hello");}
element.innerHTML = '...<input id="xyz"...>...';
document.getElementById('xyz').onclick = alertsms;
// или document.getElementById('xyz').addEventListener("click", alertsms, false);
P.S. Внешняя анонимная функция с вызовом «на месте» - это стандартный прием для локализации своих "глобальных" переменых: функция-с-вызовом-на-месте |
etc.,
СПАСИБО огромное за толковый ответ!!! |
| Часовой пояс GMT +3, время: 13:31. |