Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Скриптик GreasMonkey (https://javascript.ru/forum/events/40958-skriptik-greasmonkey.html)

ArtemKrass 26.08.2013 11:33

Скриптик 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 Эт омой первый скрипт...

DeD_Mazai 26.08.2013 13:42

Код:

onClick=alertsms()
Если дело не в отсутствии скобок, то я даже незнаю...у себя прогнал, всё работает:)

ArtemKrass 26.08.2013 21:22

Каких скобок? У меня же есть скобки. Функция так и не срабатывает. Может в GreasMonkey как-то по особому нужно функции оборачивать?

ArtemKrass 27.08.2013 09:17

Ребята, помогите, пожалуйста! Ну как внедрять функции в GreasMonkey, без них же никуда!

DeD_Mazai 27.08.2013 10:49

Вот тут хорошо описано про ваше расширение и его скрипты Тык

ArtemKrass 27.08.2013 13:47

Я это читал еще перед написанием скрипта. Сам greasmonkey у меня работает, не получается именно вызвать функцию при нажатии onClick

etc. 27.08.2013 15:44

Попробуй такой вариант:
(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;	

})()

ArtemKrass 28.08.2013 10:20

etc.,
Так сработало! Можешь рассказать почему? Функция в функции или что это???

etc. 28.08.2013 15:42

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. Внешняя анонимная функция с вызовом «на месте» - это стандартный прием для локализации своих "глобальных" переменых: функция-с-вызовом-на-месте

ArtemKrass 29.08.2013 13:54

etc.,
СПАСИБО огромное за толковый ответ!!!


Часовой пояс GMT +3, время: 19:48.