Как заставить горячую клавишу расширения Chrome работать с Gmail, Yahoo Mail и т. Д.? - PullRequest
0 голосов
/ 07 января 2012

Я использую следующий код для реализации горячей клавиши для моего расширения Chrome:

// content script:
  window.addEventListener("keydown", function(event) {
      if (event.ctrlKey && event.keyCode == 81) {alert('Ctrl+Q Pressed!');}
    }, false);

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

...
  "content_scripts": [
    {
      "all_frames": true
...

Например, с http://danish.typeit.org, горячая клавиша даже сейчас работает при наборе с этим и персональных сообщений Facebook тоже. Кажется, везде, кроме как при составлении писем с использованием gmail, yahoo mail или gmx. Пока выбрано поле композиции, горячая клавиша не работает. Это разочарование, так как я надеялся, что люди воспользуются моим расширением для написания электронных писем. И Твиттер, он также не работает при наборе в Твиттере.

1 Ответ

0 голосов
/ 15 января 2012

Я думаю, что причина того, что скрипт содержимого не загружается для iframe редактора, даже если вы указали all_frames, заключается в том, что скрипты контента применяются только к iframes, которые присутствуют в разметке, когда загружается содержащая страница.

В случае страницы gmail на странице есть несколько iframes, некоторые из которых присутствуют в разметке содержащей страницы (к которой применяется скрипт содержимого), а затем - для редактора,который создается JavaScript после загрузки страницы.

Даже если вы попытаетесь подождать, пока JavaScript на странице загрузит iframe для редактора, JavaScript в скрипте содержимого не сможет получить доступэто связано с тем, что доступ к объекту contentWindow в iframe не разрешен в скриптах содержимого .

. Возможно, в конечном итоге будет внедрен файл JavaScript в DOM, который затем выполнит логику, которую вы используете вскрипт контента.

Скрипт контента может выглядеть примерно так:

document.body.appendChild(document.createElement("script")).src = "http://external/file/javascript.js";

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

// These are the IDs gmail uses, each mail app would be different
document.getElementById("canvas_frame").contentWindow.document.getElementById(":nt")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...