2012-01-07 6 views
0

Я использую следующий код для реализации горячих клавиш для моего расширения Chrome:Как получить горячую клавишу расширения chrome для работы с gmail, почтой yahoo и т. Д.?

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

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

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

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

ответ

0

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

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

Даже если вы должны были дождаться, пока JavaScript на странице загрузит iframe для редактора, JavaScript в скрипте содержимого не сможет получить к нему доступ, поскольку доступ к объекту contentWindow iframe составляет not allowed in content scripts.

Долгий выстрел может заключаться в том, чтобы вставить файл 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") 

 Смежные вопросы

  • Нет связанных вопросов^_^