Обнаружение ключевого события в любом элементе (Usercript) [дубликат]

Замена Ereg с помощью preg (начиная с PHP 5.3.0) была правильным шагом в нашу пользу.

preg_match, который использует синтаксис регулярных выражений, совместимый с Perl, часто является более быстрой альтернативой ereg. [ ! d1]

Вы должны знать 4 основных элемента для переноса шаблонов ereg в preg:

Добавить разделители (/): 'pattern' => '/pattern/' Разделитель Escape, если он является частью шаблона: 'patt/ern' => '/patt\/ern/' Достичь это программно следующим образом: $old_pattern = '<div>.+</div>'; $new_pattern = '/' . addcslashes($old_pattern, '/') . '/'; eregi (нечувствительное к регистру сопоставление): 'pattern' => '/pattern/i' Итак, если вы используете функцию eregi для совпадения case insenstive, просто добавьте 'i' в конец нового шаблона ('/ шаблон/'). Значения ASCII: В ereg, если вы используете номер в шаблоне, предполагается, что вы ссылаетесь на ASCII символа. Но в preg число не рассматривается как значение ASCII. Таким образом, если ваш шаблон содержит значение ASCII в выражении ereg (например: новая строка, табуляции и т. Д.), Преобразуйте его в шестнадцатеричный и префикс с помощью \ x. Example: 9(tab) becomes \x9 or alternatively use \t.
3
задан Mogsdad 7 November 2014 в 02:22
поделиться

3 ответа

Редактирование в Документах Google использует iframe. Вам нужно прикрепить слушателя к документу iframe. Кажется, что что-то осложняет iframe, который я еще не смог полностью выработать, но для Firefox выглядит следующим образом:

var iframe = document.getElementsByTagName("iframe")[0];
if (iframe) {
    iframe.contentDocument.addEventListener("keypress", function(evt) {
        console.log("iframe keypress: " + evt.which);
    }, false);
}
3
ответ дан Tim Down 23 August 2018 в 02:32
поделиться
  • 1
    Ах, я не думал об этом, и он действительно делает именно то, что я хотел - спасибо! – Jacob 10 December 2010 в 00:52

Вам не нужно прикреплять слушателя ко всем элементам на странице.

window.addEventListener('load', function() {
    document.addEventListener('keypress', function() { alert("hello!"); });
}

Поскольку это сценарий GreaseMonkey, вам не нужно беспокоиться об IE и использовать метод addEventListener.

0
ответ дан Christian Tellnes 23 August 2018 в 02:32
поделиться
  • 1
    Да, это то, что я пробовал в первую очередь ... Моя проблема кажется специфичной для Документов Google. Вышеприведенный код отлично работает на любом другом сайте, а не в Документах Google при редактировании документа. Это работает для вас в этом случае? – Jacob 7 December 2010 в 22:25
  • 2
    Я думаю, что они останавливают событие для дальнейшего выполнения своего обработчика событий. Я не смог заставить его работать сам. Я думаю, вам нужно удалить прослушиватель событий и вызвать его вручную. Вы можете попытаться взглянуть на библиотеку закрытия js, которую они используют. – Christian Tellnes 10 December 2010 в 01:19

Кажется, работает для меня ... но я использую jQuery $ (document) .ready (), чтобы убедиться, что моя страница загружена перед присоединением какого-либо события. Я думаю, вы могли бы сделать это на голом javascript с помощью:

window.onload = function()
{
  els = document.getElementsByTagName("*");
  for(i=0;i<els.length;i++) {
    els[i].onkeypress=function(){alert("hello!");};
  }
}

Кстати, вы не можете прикрепить к событию больше одной функции:

for(i=0;i<els.length;i++){
    els[i].onkeypress=function(){alert("hello!");};
    els[i].onkeypress=function(){alert("hello2!");};
    els[i].onkeypress=function(){alert("hello3!");};
}

Элемент будет зарегистрировать только последний (он переопределяет предыдущую функцию), в этом случае «alert (« hello3! »);»

0
ответ дан Romain Meresse 23 August 2018 в 02:32
поделиться
  • 1
    Ой, это была опечатка (я исправлю это выше), спасибо! Я пробовал все три «onkeypress», «onkeyup», и "onkeydown" но безрезультатно. – Jacob 7 December 2010 в 22:26
Другие вопросы по тегам:

Похожие вопросы: