2012-01-07 69 views
0

我使用下面的代碼來實現我的瀏覽器擴展程序熱鍵:如何讓鉻擴展熱鍵與Gmail,雅虎郵件等工作?

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

由於插入下面一行在清單文件時,它在大多數情況下工作過,被選中的iFrame甚至當:

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

例如http://danish.typeit.org,熱鍵甚至現在在使用那個和Facebook個人消息進行輸入時也可以工作。除了使用Gmail,雅虎郵件或gmx撰寫電子郵件之外,它似乎處處都是。在選擇合成框時,熱鍵不起作用。這是令人失望的,因爲我希望人們可以使用我的擴展來幫助寫郵件。和Twitter一樣,在Twitter上打字也無濟於事。

回答

0

我認爲即使指定了all_frames,也不會爲編輯器iframe加載內容腳本的原因是內容腳本僅適用於加載包含頁面時存在於標記中的iframe。

在gmail頁面的情況下,頁面上有多個iframe,其中一些出現在包含頁面的標記中(內容腳本被應用到),然後是編輯器的標記在頁面加載後由JavaScript創建。

即使您試圖等待頁面上的JavaScript加載編輯器的iframe,內容腳本中的JavaScript也將無法訪問它,因爲訪問iframe的contentWindow對象是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") 
相關問題