Gmail, кажется, захватывает все события клавиатуры. Есть ли способ обойти это? - PullRequest
10 голосов
/ 24 февраля 2010

Я пишу расширение для Chrome, которое запускает скрипт с сочетанием клавиш. Он отлично работает на большинстве страниц, но я понял, что в Gmail это не так: кажется, что все события клавиатуры записываются в Gmail и не передаются по моей функции.

У меня есть скрипт содержимого (в расширении Chrome он добавляется на любую нужную страницу), который (упрощенно, конечно):

document.body.addEventListener('keypress', myFunction, true);
function myFunction(event) {
    console.log("yay, Gmail didn't let me down!");
}

Но на самом деле, Gmail меня подводит. Я знаю, что скрипт загружен . Я пробовал разные варианты window.addEventListener и другие типы событий безрезультатно.

Кто-нибудь знает способ обойти это? Я попытался выяснить, может ли скрипт GreaseMonkey это сделать, что привело меня сюда: http://code.google.com/p/gmail-greasemonkey/, но это не помогло мне.

Спасибо!

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

Я не знаю, как работают записи событий клавиатуры от GMail, но недавно я написал простой навигатор клавиш (так что мне не нужно использовать мышь для перехода по ссылкам) для Chrome.

Это не расширение, а скрипт пользователя / Greasemonkey, но он запускается двойным вводом запятой (,) и работает в GMail.

Может быть, это поможет вам взглянуть на источник. Вы можете скачать его здесь: http://userscripts.org/scripts/show/68609

1 голос
/ 09 ноября 2010

Хорошо, у меня есть рабочее решение, разработанное в обратном порядке из плагина onePassword. Я могу только догадываться, почему это работает, я полагаю, это из-за добавления события к элементам ввода. Однако измените что-нибудь, и оно перестает работать (вызов redir внизу почему-то внизу)

function redir(e) {
    e.focus();
    var h = document.createEvent("KeyboardEvent");
    h.initKeyboardEvent('keydown', true, true);
    e.dispatchEvent(h)
}
$("input").each(function(t,l) {redir(l)});

document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && e.keyCode) {
      if (e.keyCode == 190) {
        chrome.extension.sendRequest({name: "spot-openPopUp"});
      }
    }
},false);

redir(document.body);

Как видите, я использовал перенаправление. Этот пример очень грубый, так что не используйте его

0 голосов
/ 24 февраля 2010

Вы можете попробовать процесс перенаправления:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
...