Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2013, 10:33
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

Скриптик 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 Эт омой первый скрипт...
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2013, 12:42
Интересующийся
Отправить личное сообщение для DeD_Mazai Посмотреть профиль Найти все сообщения от DeD_Mazai
 
Регистрация: 25.08.2013
Сообщений: 20

Код:
onClick=alertsms()
Если дело не в отсутствии скобок, то я даже незнаю...у себя прогнал, всё работает
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2013, 20:22
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

Каких скобок? У меня же есть скобки. Функция так и не срабатывает. Может в GreasMonkey как-то по особому нужно функции оборачивать?
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2013, 08:17
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

Ребята, помогите, пожалуйста! Ну как внедрять функции в GreasMonkey, без них же никуда!
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2013, 09:49
Интересующийся
Отправить личное сообщение для DeD_Mazai Посмотреть профиль Найти все сообщения от DeD_Mazai
 
Регистрация: 25.08.2013
Сообщений: 20

Вот тут хорошо описано про ваше расширение и его скрипты Тык
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2013, 12:47
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

Я это читал еще перед написанием скрипта. Сам greasmonkey у меня работает, не получается именно вызвать функцию при нажатии onClick
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2013, 14:44
Новичок на форуме
Посмотреть профиль Найти все сообщения от etc.
 
Регистрация: 27.08.2013
Сообщений: 2

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

})()
Ответить с цитированием
  #8 (permalink)  
Старый 28.08.2013, 09:20
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

etc.,
Так сработало! Можешь рассказать почему? Функция в функции или что это???
Ответить с цитированием
  #9 (permalink)  
Старый 28.08.2013, 14:42
Новичок на форуме
Посмотреть профиль Найти все сообщения от etc.
 
Регистрация: 27.08.2013
Сообщений: 2

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. Внешняя анонимная функция с вызовом «на месте» - это стандартный прием для локализации своих "глобальных" переменых: функция-с-вызовом-на-месте
Ответить с цитированием
  #10 (permalink)  
Старый 29.08.2013, 12:54
Аспирант
Отправить личное сообщение для ArtemKrass Посмотреть профиль Найти все сообщения от ArtemKrass
 
Регистрация: 23.02.2013
Сообщений: 56

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простенький скриптик: выбор "да"/"нет" и переход rustik-yes Элементы интерфейса 3 25.03.2013 14:27
простенький скриптик -из учебника! drevex6 Общие вопросы Javascript 2 03.03.2013 16:54
Нужнно написать скриптик! rsd Общие вопросы Javascript 5 04.01.2011 10:36
Подскажыте скриптик часиков amd64 Элементы интерфейса 1 23.12.2010 21:03
"Причесал" скриптик, а он в Опере не пошел Mitrandir Events/DOM/Window 18 05.10.2008 11:43