Скриптик 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, время: 19:48. |