Chrome機能拡張のchrome.omnibox.onInputChangedはChrome91ではManifest V3に対応していないようです

Chrome 88から、機能拡張の新しいバージョン(Manifest V3)が導入されていますが、Chrome91では一部の機能が正常に動作しないようです
2021.07.17

IoT事業部の熊膳です。

Chrome 88 から、機能拡張の新しいバージョン Manifest V3 が導入されました。プライバシー、セキュリティ、パフォーマンスが改善されたとのことです。

Chrome Developers Welcome to Manifest V3

ということで、自作の機能拡張をV3にバージョンアップしてみたのですが、現時点の最新版のChrome 91(91.0.4472.164)で、omniboxの一部のAPIがV3に対応していないことがわかったので共有します。

結論

chrome.omnibox.onInputChanged は、Chrome 91では、Manifest V3 に対応していない

chrome.omnibox.onInputChanged を使用したい場合は、しばらくは Manifest V2を使う必要があります。

もうちょっと詳しく

以下のサンプル機能拡張をV3にバージョンアップしてみます。

Manifest V2のサンプル

{
  "name": "Omnibox Example MV2",
  "description" : "To use, type 'omnix' plus a search term into the Omnibox.",
  "version": "1.1",
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "omnibox": { "keyword" : "omnix" },
  "manifest_version": 2
}
chrome.omnibox.onInputChanged.addListener((text, suggest) => {
    console.log('inputChanged: ' + text);
    suggest([
      {content: text + " one", description: "the first one"},
      {content: text + " number two", description: "the second entry"}
    ]);
  });
  
  // This event is fired with the user accepts the input in the omnibox.
  chrome.omnibox.onInputEntered.addListener((text) => {
    console.log('inputEntered: ' + text);
    alert('You just typed "' + text + '"');
  });

omniboxに入力すると入力内容を含んだ候補が表示される単純な機能拡張です。

以下のようにManifest V3にしてみます。今回の例ではスクリプト部分は変更不要です。スクリプトによっては、V3ではService Workerとして動作することになるので変更が必要となります。

Manifest V3のサンプル

{
  "name": "Omnibox Example MV3",
  "description": "To use, type 'omnix' plus a search term into the Omnibox.",
  "version": "1.1",
  "manifest_version": 3,
  "background": {
    "service_worker": "background.js"
  },
  "omnibox": {
    "keyword": "omnix3"
  }
}

うまく動作しないようです。 ログを確認します。機能拡張の「ビューを検証 Service Worker」部分がリンクになっているのでそこからDevToolsを表示する方法が簡単です。

エラーが出てますね。

DOMParser is not defined となってます。Service Workerなのでそのとおりなのですが、これはどういうことなんでしょうか?

どうやら不具合のようです

調べてみると、どうやら不具合のようです。

担当者もついているので、そのうち修正されるようです。 それにしても、上記のIssueでどなたかも書いていますが公式ドキュメントに一言あると親切だなと思いました。私のようにハマると思うので。

Chrome 92 Betaで確認

現在Beta版としてリリースされているChrome 92 Beta(92.0.4515.101)で動作確認してみましたが、改善されていませんでした。

まとめ

Chrome機能拡張がManifest V3対応になりましたが、Chrome 91ではomniboxのonInputChangedを使う場合に正常に動作しないことがわかりました。 利用したい場合は、しばらくはV2のままにしておく必要があります。

以上、どなたかの参考になれば幸いです。