2016-05-21 7 views
1

私はショートカットで開くこともできるポップアップを備えたChrome拡張機能を持っています。ポップアップが開くと、ユーザーがショートカットを使用したかどうか、または拡張アイコンをクリックしたかどうかを確認できますか?Chrome拡張機能がショートカットで呼び出されたかどうかを確認するにはどうすればよいですか?

私は、ショートカットを使用するようにユーザーに助言したいが、そのショートカットを既に知っているユーザーにそのヒントを表示したくないからです。

ポップアップやショートカットがmanifest.jsonでこのように定義されています。

"browser_action": { 
    "default_icon": "images/icon48.png", 
    "default_popup": "popup.html", 
    "default_title": "__MSG_tooltip__" 
    }, 
    "commands": { 
    "_execute_browser_action": { 
     "suggested_key": { 
     "default": "Ctrl+Shift+Space" 
     } 
    } 
    }, 

答えて

2
chrome.browserAction.onClicked.addListener 

は利用できません、ので:ブラウザのアクションアイコンをクリックしたときに発生し

。ブラウザのアクションにポップアップがある場合、このイベントは発生しません。

私たちはpopupです。

chrome.commands.onCommand.addListener 

はご利用いただけません、理由:

'_execute_browser_action' と '_execute_page_action' コマンドは、拡張機能のポップアップを開くのアクションのために確保 です。彼らはあなたが処理できるイベントを通常生成しません。

いくつかのページにはリスナーを挿入し、各ページにはキーを押して試してみてください。 popupから


var isPressed; 

document.body.addEventListener("keydown", function (e) { 

    if (!(e.keyCode != 17) || !(e.keyCode != 16) || !(e.keyCode != 32)) return; 

    isPressed = true; 

}); 

瞬間に拡大content_scriptsにメッセージを送信:

chrome.tabs.query({active: true, currentWindow: true}, function (tabs) { 

    chrome.tabs.sendMessage(tabs[0].id, {action: "isPressed"}, function (responce) { 

     if (responce) { 

     } 
    }); 
}); 

メッセージを受け取った後、リスナーをコンテンツスクリプトで応答として変数isPressedを送信:

chrome.runtime.onMessage.addListener(function (message, sender, response) { 

    if (message.action == "isPressed") { 

     response(isPressed); 
    } 
}); 

変数場合キーの押下で呼び出されたことを意味します。

1

ユーザーがショートカットを使用したかどうか、または が拡張アイコンをクリックしているかどうかを確認できますか?

これを検出するクリーンな直接的な方法はないようです。

私は回避策を見つけようとしてにいくつかの努力を入れているので、私は私が試したし、それが動作しない理由/検討しているものを共有したいと思います:

  1. いくつかのカスタムにキーボードショートカットを添付コマンドを使用して、ポップアップページを変更してからプログラムで開きます。

    • ポップアップをプログラム的に開く方法がないため、少なくとも現在のChromeの安定版(v50)では動作しません。
  2. "_execute_browser_action"と同じショートカットでカスタムコマンドを作成し、それを使用してポップアップにメッセージを送信します。

    • 2つのコマンドで同じショートカットを共有できないため、機能しません。
  3. 読み込み直後にポップアップページでkeyupをキャプチャしてみてください。

    • これをテストしたところ、最初はうまくいっていたようですが、確かに信頼できません。ユーザーが単にキーボードショートカットを押すと、ポップアップページにリスナーを登録する前に、keyupイベントが発生します。
  4. コンテンツスクリプトを使用してページ上​​をキャプチャし、それが(上記のユーザー名で示唆したように)キーボードショートカットが押されたことを知らせるために、ポップアップページにメッセージを送信します。

    • これは、ほとんどのページ上で動作するはずですが、コンテンツのスクリプトは、アドレスバーにし、特定のページ(chrome://chrome-extension://)上のキー操作をキャプチャすることができません。
    • ユーザーがchrome://extensionsページのショートカットをカスタマイズできるということを考慮する必要があるため、実装が難しいです。 chrome.commands.getAll()はローカライズされたキー名を提供するため(例えば、英語で"Ctrl+Shift+Space"、チェコ語では"Ctrl+Shift+Mezera")、現在割り当てられているショートカットをプログラムでテストすることは驚くほど困難です。 。
関連する問題