The message port closed before a response was received.

先日作ったText Drain Extensionを導入した以降Chromeのコンソールでエラーが出るようになってしまった。

Unchecked runtime.lastError: The message port closed before a response was received.

もしもChrome拡張の開発者ではない人がこの記事にたどり着いていたら、このエラーは開発者にしか対処できないものですので気になるようなら諦めてそのChrome拡張を削除するか、気にせず使い続けるかの二択となるかと思います。
以下、開発者向けに自分のケースについて原因と対策を書きます。

原因

chrome.runtime.onMessage.addListner()からレスポンスを返却していないから。
メッセージ送ったのにレスポンス来ませんけど?!もう待ってらんないからメッセージポート閉じちゃいますからね!ってChromeが怒ってる。

対策

以下のように対応前はメッセージを受け取りさえすればよかったのでレスポンスを返してなかったが、返すようにするとChromeも黙る。

// これでもメッセージは受け取れるが、レスポンスを返していないのでコンソールでエラーが出る
chrome.runtime.onMessage.addListener(request  => {
  if (request.type === "TAB_ACTIVATED") textPassAction();
});

以下で改善。

// 引数にsenderとsendResponse追加
chrome.runtime.onMessage.addListener((request, sender, sendResponse)  => {
  if (request.type === "TAB_ACTIVATED") textPassAction();
  // 空でいいのでレスポンス返す
  sendResponse({});
  // stack overflowでtrue返すといいよ、みたいなの見たので返してみてる。外してどうなるかは試してない
  return true;
});
Category
Tags
No Tag

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です