0

次のコードを使用して、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で入力しても機能しません。

4

1 に答える 1

0

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

gmail ページの場合、ページには複数の iframe があり、含まれているページ (コンテンツ スクリプトが適用されるページ) のマークアップに存在するものと、その後 JavaScript によって作成されるエディター用の iframe があります。ページが読み込まれます。

ページ上の JavaScript がエディター用の iframe をロードするのを待っても、コンテンツ スクリプト内の iframe の contentWindow オブジェクトへのアクセスはコンテンツ スクリプトでは許可されていないため、コンテンツ スクリプト内の JavaScript はそれにアクセスできません。

ロング ショットは、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")
于 2012-01-15T03:38:56.337 に答える