投稿

1月, 2021の投稿を表示しています

chrome.runtime.sendMessage() の備忘録

イメージ
ここ最近 Chrome 拡張機能 を作って遊んでいますが、 Chrome 拡張機能 API の『 chrome.runtime.sendMessage() 』というAPIメソッドを使った拡張機能のコードをテスト中に、 Unchecked runtime.lastError: The message port closed before a response was received. というエラーが出て来たのですが、どう対処して良いのか当初はこのメッセージからは直ぐに理解できなかったので、ここに備忘録としてメモしておきます。 セキュリティー上の仕様 Chrome拡張機能ではセキュリティー上、各「ユーザーインターフェース (UI)」、 「バックグラウンドプロセス」とWebページ上に埋め込まれる「コンテント (Content) スクリプト」のプロセスは、各自、違うプロセスで処理されて、メモリ領域も分離されています。 なので、拡張機能のバックグラウンドページで宣言されている変数の値をポップアップを処理するスクリプトから 直接 アクセスする事は出来ません。 拡張機能のポップアップやオプションページのスクリプトの場合だと、バックグラウンドページに限っては拡張機能APIの『 chrome.runtime.getBackgroundPage() 』メソッドを使うとバックグラウンドページのインスタンスが取得出来るので、バックグラウンドページのプロセスで任意のメソッドを実行出来ます。 例として、ポップアップ又はオプションページのスクリプト内に: chrome.runtime.getBackgroundPage().console.log("ログメッセージ"); という行を加えると、「getBackgroundPage().」以降に続く「console.log(...)」がバックグラウンドページのプロセスで処理されるので、バックグラウンドページのコンソールのログに「ログメッセージ」と出力されます。 でも、このAPIはコンテクストスクリプトでは使う事が出来ない