Кажется, что Gmail захватывает все события клавиатуры. Любой способ обойти это?
Я пишу расширение Chrome, которое запускает script с помощью сочетания клавиш. Он отлично работает на большинстве страниц, но я понял, что в Gmail это не так: кажется, что все события клавиатуры захватываются Gmail и не имеют пузырьков до моей функции.
У меня есть контент script (в расширении Chrome это добавляется на любую желаемую страницу), которая (упрощена):
document.body.addEventListener('keypress', myFunction, true);
function myFunction(event) {
console.log("yay, Gmail didn't let me down!");
}
Но на самом деле, Gmail меня подвела. Я знаю, что загружается script. Я пробовал разные варианты window.addEventListener
и других типов событий безрезультатно.
Кто-нибудь знает, как обойти это?
Я пытался увидеть, может ли GreaseMonkey script сделать это, что привело меня сюда: http://code.google.com/p/gmail-greasemonkey/, но это меня не помогло.
Спасибо!
Ответы
Ответ 1
Я не знаю, как работает работа с клавиатурой GMail, но недавно я написал простой навигатор с клавиатурой (поэтому мне не нужно использовать мышь для кликов) для Chrome.
Это не расширение, а пользователь /Greasemonkey script, но он срабатывает, вводя запятую (,) дважды, и он работает в GMail.
Возможно, это поможет вам взглянуть на источник. Вы можете скачать его здесь: http://userscripts.org/scripts/show/68609
Ответ 2
Хорошо, у меня есть рабочее решение, обратное проектирование из плагина 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);
Как вы видите, я использовал перенаправление. Этот пример действительно грубый, поэтому не просто используйте его
Ответ 3
Вы можете попробовать процесс перенаправления:
if (document.body.onkeypress) {
// add as event listener instead
var kpfunc = document.body.onkeypress;
document.body.addEventListener('keypress', kpfunc, true);
}