Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Перехват нажатия клавиш


Автор: Frazelli 30.6.2009, 09:11
Здравствуйте. Помогите пожалуйста разобраться.

Прикрутил скрипт к FireFox через Greasemonkey. Нужно чтобы этот скрипт отслеживал нажатия клавишь в FF и по нажатию определенных клавиш делал какие-то действия.

Код


function myfunc(event)
{
  if(event.keyCode==13)
  {
     alert('!!!');
  }
};



Написал функцию, но ничего не работает. Может чего-то не хватает?

Автор: Samotnik 30.6.2009, 09:45
Для начала разберитесь с этим 
Код

<html>
<body onkeypress="pressed()">
<script language="JavaScript">
function pressed() 
{
alert("Key pressed! ASCII-value: " +event.keyCode );
}
</script>
</body>
</html>

а потом изучить http://web-mastering.net/internet/39.shtml  smile 

Автор: Frazelli 30.6.2009, 10:08
С этим все понятно. Но как сделать чтобы этот код работал в файле .js?  
Нужно прикрутить скрипт к браузеру.

Автор: Samotnik 30.6.2009, 11:06
Цитата(Frazelli @  30.6.2009,  10:08 Найти цитируемый пост)
Но как сделать чтобы этот код работал в файле .js?  

очень просто 
пропиши в хидере  html страницы свой  ЖС файл
Код

<script type='text/javascript' src='/path/to/you/file.js'></script>

Автор: Frazelli 30.6.2009, 11:12
Код


<html>
<body onkeypress="pressed()">
<script language="JavaScript">
function pressed() 
{
alert("Key pressed! ASCII-value: " +event.keyCode );
}
</script>
</body>
</html>


Этот код в js файле работать не будет.


Код

<script type='text/javascript' src='/path/to/you/file.js'></script>

И я не могу в хидере прописать это. Надо чтобы скрипт запускался на определенных сайтах.

Автор: Samotnik 30.6.2009, 11:37
Цитата(Frazelli @  30.6.2009,  11:12 Найти цитируемый пост)
Этот код в js файле работать не будет.

да, будет работать этот 
Код

function pressed() 
{
alert("Key pressed! ASCII-value: " +event.keyCode );
}


Цитата(Frazelli @  30.6.2009,  11:12 Найти цитируемый пост)
И я не могу в хидере прописать это. Надо чтобы скрипт запускался на определенных сайтах.

эээ
не понял, что это значит ?

Автор: Frazelli 30.6.2009, 12:10
Не работает этот код в js файле. Не хватает чего-то..

Цитата

эээ
не понял, что это значит ? 


создаю файл js  с этим кодом:
Код

function pressed() 
{
alert("Key pressed! ASCII-value: " +event.keyCode );
}

Захожу на сайт на котором я хочу чтобы этот скрипт работал. Если в опере: нажимаю правой кнопкой мыши > изменить настройки сайта > сценарии > файлы пользователя JavaScript. И включаю свои скрипты. В FF немного подругому..

И не работает этот скрипт. 

Автор: Samotnik 30.6.2009, 13:11
Цитата(Frazelli @  30.6.2009,  12:10 Найти цитируемый пост)
И не работает этот скрипт.  

конечно не работает,  нужно ведь на какое - то событие поставить этот скрипт  smile 
на onload  можно, либо на конкретный элемент на onClick

Автор: Frazelli 30.6.2009, 13:17
А на какое событие можно поставить? нужно чтобы всегда на этом сайте при нажатии клавиши делалось какое-то действие.

Автор: Samotnik 30.6.2009, 14:40
Цитата(Frazelli @  30.6.2009,  13:17 Найти цитируемый пост)
А на какое событие можно поставить? нужно чтобы всегда на этом сайте при нажатии клавиши делалось какое-то действие. 

http://www.w3schools.com/jsref/jsref_onload.asp

Автор: Frazelli 30.6.2009, 14:56
Цитата

onLoad

Можно поподробней пожалуйста? smile 


сделал событие onLoad
Код

function pressed() 
{
  alert("Key pressed! ASCII-value: " +event.keyCode );
}

onload = pressed;


срабатывает только кода страница обновляется, на нажатие клавишь не реагирует. 


Автор: bars80080 30.6.2009, 15:17
эх, Frazelli, вам серьёзно надо взять книжку по javascript и почитать её. это ведь совсем не сложно

а так вы будете спотыкаться на каждом шагу очень долго

Код

<body onload="pressed();">


надеюсь не нужно указывать куда это вставлять?

Автор: Frazelli 30.6.2009, 15:32
Цитата

эх, Frazelli, вам серьёзно надо взять книжку по javascript и почитать её. это ведь совсем не сложно

мне только сегодня пришлось столкнутсья с JavaScript. 

Цитата

надеюсь не нужно указывать куда это вставлять?


это для файла html. мне надо для js

вот что получилось.  myscript.js

Код

<html>
<body onload="pressed()">
<script language="JavaScript">
function pressed() 
{
alert("Key pressed! ASCII-value: " +event.keyCode );
}
</script>
</body>
</html>


Не работает это в js файле и не будет работать.

Надо реализовать это в js файле, а не html

Автор: bars80080 30.6.2009, 15:51
в js-файле:

Код

window.onload = function() { pressed(); };

Автор: Frazelli 30.6.2009, 16:00
Цитата

window.onload = function() { pressed(); };


я так уже делал.

Цитата

сделал событие onLoad
    
function pressed() 
{
  alert("Key pressed! ASCII-value: " +event.keyCode );
}
onload = pressed;


срабатывает только кода страница обновляется, на нажатие клавишь не реагирует. 


Автор: bars80080 30.6.2009, 19:33
для вас, что 
Цитата(Frazelli @  30.6.2009,  16:00 Найти цитируемый пост)
onload = pressed;

и 
Цитата(Frazelli @  30.6.2009,  16:00 Найти цитируемый пост)
window.onload = function() { pressed(); };

одно и тоже?

зрительно даже вторая строка длинее, как здесь не уловить разницу?

Автор: Frazelli 30.6.2009, 19:40
Цитата

зрительно даже вторая строка длинее, как здесь не уловить разницу? 


работает одинакво. точнее не работают оба варианта.

зрительно отличается, а програмно нет.

Автор: bars80080 30.6.2009, 20:43
программно это совершенно разные вещи. первое - присвоение событию значение переменной (что само по себе бредово). во втором случае - назначение событию обработчика

у вас логика скорее всего хромает




вот, к примеру, зачем по загрузке окна выводить сообщение? да ещё и с неизвестным событием?
/кстати, если событие отсутствует может быть ошибка. /

ошибки какие-нибудь пишет?

Автор: Frazelli 1.7.2009, 07:51
Цитата

у вас логика скорее всего хромает

Оба эти варианта вызывают сообщение при загрузке страницы и всё! разницы между ними я не вижу.

Цитата

вот, к примеру, зачем по загрузке окна выводить сообщение? да ещё и с неизвестным событием?
/кстати, если событие отсутствует может быть ошибка. /


Мне нужен скрипт который на определенном сайте всегда будет отслеживать нажатия клавиш. И по нажатию заданной клавиши должно выполнятся действие (действие задается в условии, если нажата такая-то клавиша, то сделать такое-то действие)

Цитата

ошибки какие-нибудь пишет? 


Нет, ошибок не пишет. Просто по нажатию клавиш ничего не происходит.

Автор: fidres 4.7.2009, 10:14
ну, блин, собрались знатоки!.. и давай клевать...
не понимает человек! ну что ж это, грех?!
книжки... сами-то много книжек читали по молодости?..

у меня вот тоже та же проблема... не могу в ФФ прикрутить событие по нажатию клавиш...
и ничего в этом зазорного.
если б все могли объяснить, а не издеваться - толку, глядишь, больше бы было.
сейчас столько всего развелось, что даже в осле, порой, не всё припомнишь!.. а если это всё ещё домовской моделью перебодяжить - так и подавно ум сломаешь!..

Frazelli, в Вашей ситуации нажатие любой кнопки (событие) нужно присваивать какому-нибудь объекту ВНУТРИ документа (я прикручиваю это событие к объекту BODY. как Вам, впрочем, и посоветовали... только немного неумело).
Код
<HTML>
<HEAD>
<script><!--
// предопределяем простенькую функцию, которая будет выводить что-то при нажатии кнопки
function _evn(){
  // здесь пологается что-то делать с тем, что вызвало наше событие, либо с его составляющими
  alert('была нажата кнопка');
}

// теперь эту функцию мы привязываем к событию onKeyDown в контексте документа
document.onkeydown=_evn;
//--></SCRIPT>
</HEAD>
<BODY>
нажмите любую клавишу, чтобы активировать событие
</BODY>
</HTML>
в любом браузере (по крайней мере в тех 5-ти, в которых я этот код проверил - это сработало) по нажатию кнопки на клавиатуре - будет выскакивать сообщение.

для меня же проблема состоит несколько в другом...
хотя... стоит ли спрашивать здесь, где только и могут, что осмеять...
 smile 

Автор: fidres 4.7.2009, 10:30
кстати сказать.
последовательность выполнения в моём случае:
загрузка документа (html)
загрузка заголовка (head)
загрузка в память скрипта для последующего исполнения (при вызове)
замена onkeydown своей функцией
загрузка тела документа
ожидание события onkeydown

это что касается логики.

что касается логики < BODY onLoad="функция и подобного (в приведённых ранее примерах):
загрузка документа (html)
загрузка тела документа
присвоение функции событию onLoad
выполнение скрипта (с неопределённым значением event, т.к. onLoad ещё не произошло - страница ТОЛЬКО-ЛИШЬ ГРУЗИТСЯ!!!)
окончание загрузки тела документа (страницы для отображения) {с кучей ошибок в памяти процесса}

знание новомодных примочек для программежа - не спасает от тупости носителей оных знаний!
(пожалуй, это закон)
 smile

Добавлено @ 10:40
нужен ли пример с подгрузкой скрипта из внешнего файла .JS?

обзываем этот файл a.js (заметьте, что некоторые системы хостеров работают на платформах *NIX, где регистр букв имеет значение!)
Код
function _evn(){
  alert('была нажата кнопка');
}


Код
<HTML>
<HEAD>
<script src="a.js" language="JavaScript"></SCRIPT>
<script><!--
document.onkeydown=_evn;
//--></SCRIPT>
</HEAD>
<BODY>
document.write(unescape('%u043D%u0430%u0436%u043C%u0438%u0442%u0435%20%u043B%u044E%u0431%u0443%u044E%20%u043A%u043B%u0430%u0432%u0438%u0448%u0443%2C%20%u0447%u0442%u043E%u0431%u044B%20%u0430%u043A%u0442%u0438%u0432%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0441%u043E%u0431%u044B%u0442%u0438%u0435'));
</BODY>
</HTML>


логику объяснить?

Автор: fidres 5.7.2009, 04:01
кстати.
поискал тут на досуге...
http://www.javascriptkit.com/domref/domevent.shtml
http://mynsa04.blogspot.com/2007/11/blog-post_21.html
http://xpoint.ru/forums/programming/javascript/crossbrowser/thread/41573.xhtml
http://forum.codenet.ru/showthread.php?t=35893
http://forum.vingrad.ru/forum/topic-149225/0.html  smile как не странно!

Автор: ksfinks 8.11.2009, 20:53
В firefox можно установить add-on greasemonkey (https://addons.mozilla.org/ru/firefox/addon/748) и установить в нем такой скрипт:
Код

// ==UserScript==
// @name          GoButtonsClick
// @namespace     http://diveintogreasemonkey.org/download/
// @description   clicking on all "Go" Buttons
// @include       *
// @exclude       http://diveintogreasemonkey.org/*
// @exclude       http://www.diveintogreasemonkey.org/*
// ==/UserScript==

window.go = {

  handler: function(e)
  { 

    if(!e.altKey) return true;
    if(e.keyCode!=71) return true;
     window.go.runScript();
    return false;
  },

  init: function(){
   window.addEventListener('keydown',window.go.handler,false);
  },

  runScript: function()
  {
  // Здесь вставляешь код, который тебе нужен
  }

  };
window.go.init();


В результате при нажатии Alt + G будет выполняться нужный код

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)