質問: よろしくお願いします。 Chrome/Firefoxにインストールしている拡張機能を、ウェブページ上に配置しているボタン押下をトリガーにして特定の拡張機能を起動させたいです。 半日ほど調べていたのですが見当たらず、ヒントも含めてご教授いただきたく。お願い致します。 特定の拡張機能とは自身で作成したExtension(拡張機能)を指すので、拡張機能そのものは起動すると子画面(ポップアップ)が表示されるもの。という想定です。 そもそも拡張機能はChromeなら chrome.runtime.xxxx と指定して組んでいきます。 なのでウェブページ上のボタン(JavaScript)を押下したことで直接、拡張機能を起動させるのは出来ない。というのが現状私の途中結論です。 1つ目の質問は、この私の認識で合っているのか?についてご意見いただきたく思っています。 2つ目は、 じゃあ例えばラッパー、パイプなど、他のJSモジュールやサーバサイド(nodejs含む)を介して間接的に拡張機能を起動させることはできないか? ということです。 Go言語使ってできそうな気がしているのですが、私個人Goは使ったことが無く学習コストを考えるとちょっと気が引けてます。 簡単に作れはしないことは分かっていますが、なにかヒントがあればご教授いただけると幸いです。 雑な質問で恐縮です。 ご教授いただけると幸いです。 環境=Windows10 Pro、node.js for windows
回答: > > 拡張機能そのものは起動すると子画面(ポップアップ)が表示されるもの。という想定です。 > > > いわゆるbrowser actionのポップアップは、ユーザーがアイコンをクリックすることでしか表示できないようになっており、プログラム上から表示させることはできないようです。詳しくはこのページの回答にあります。 How can I open my extension's pop-up with JavaScript? - StackOverflow 一方で通常のタブやポップアップウィンドウを作成し拡張機能のHTMLを表示させることは可能です。Content Scriptは直接`chrome.tabs`や`chrome.windows`にアクセスできないため、backgroud pageを介する必要があります。 1. Content Scriptを用意し、クリックイベントが発生した時にメッセージを送る 2. Background Scriptでメッセージを受け取り、ポップアップページを開く メッセージの渡し方 Message Passing - Google Chrome コード例 ポップアップウィンドウを表示する例です。 **manifest.json** ``` { "name": "Popup", "description": "popup", "version": "1.0", "permissions": [ "activeTab" ], "background": { "scripts": ["background.js"], "persistent": false }, "content_scripts": [ { "matches": [ "http://*/*", "https://*/*" ], "js": [ "content.js" ] } ], "manifest_version": 2 } ``` **content.js** ``` document.addEventListener("click", e => { // ならポップアップを開く if (e.target.tagName === "A") { chrome.runtime.sendMessage({ action: "OPEN_POPUP" }) } }) ``` **background.js** ``` chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { // popup.html をポップアップウィンドウとして開く if (request.action === "OPEN_POPUP") chrome.windows.create({ 'url': 'popup.html', 'type': 'popup' }) } ) ```