2012-01-07 11 views
0

私はChromeの拡張機能用のホットキーを実装するには、次のコードを使用しています:gmail、yahooメールなどで動作するようにChrome拡張機能のホットキーを取得するにはどうすればよいですか?

// 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、yahooメールまたはgmxを使用してメールを作成する場合を除いて見えます。コンポジションボックスが選択されている間、ホットキーは機能しません。これは、私が電子メールを書くのを助けるために私の拡張を使用することを望んでいたので失望しています。 Twitterでも、Twitterで入力するときは機能しません。

答えて

0

all_framesが指定されていても、コンテンツスクリプトがエディタiframeに読み込まれない理由は、コンテンツスクリプトが、含まれているページが読み込まれたときにマークアップ内にあるiframeにのみ適用されるということです。

gmailページの場合は、ページに複数のiframeがありますが、コンテンツスクリプトが適用されているページのマークアップ内にあるものと、エディタ用のものがあります。ページがロードされた後にJavaScriptによって作成されます。

iframeのcontentWindowオブジェクトへのアクセスがnot allowed in content scriptsであるため、ページ上のJavaScriptがエディタのiframeを読み込むのを待っても、コンテンツスクリプトのJavaScriptはそれにアクセスできません。

DOMにJavaScriptファイルを挿入して、コンテンツスクリプトにあるロジックを実行することが考えられます。

コンテンツスクリプトのようなものかもしれません:リモートJavaScriptファイルの内容がしようとすると、エディタはiframeへのアクセスを得ることができる次に、あなたは要素が作成されるまでのsetIntervalを使用する必要があります

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

// These are the IDs gmail uses, each mail app would be different 
document.getElementById("canvas_frame").contentWindow.document.getElementById(":nt") 
関連する問題