Gmail, похоже, фиксирует все события с клавиатуры.Есть какой-нибудь способ обойти это?
-
22-09-2019 - |
Вопрос
Я пишу расширение 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);
}