Gmail, похоже, фиксирует все события с клавиатуры.Есть какой-нибудь способ обойти это?

StackOverflow https://stackoverflow.com/questions/2323949

Вопрос

Я пишу расширение 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/ но это мне не помогло.

Спасибо!

Это было полезно?

Решение

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

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

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

Другие советы

Хорошо, у меня есть рабочее решение, разработанное с помощью плагина 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);

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

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

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top