この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 1186804: Omnibox API throws in MV3 due to internal use of DomParser
- Issue 1056354: Add support for parsing XML and HTML documents to Manifest V3
担当者もついているので、そのうち修正されるようです。 それにしても、上記のIssueでどなたかも書いていますが公式ドキュメントに一言あると親切だなと思いました。私のようにハマると思うので。
Chrome 92 Betaで確認
現在Beta版としてリリースされているChrome 92 Beta(92.0.4515.101)で動作確認してみましたが、改善されていませんでした。
まとめ
Chrome機能拡張がManifest V3対応になりましたが、Chrome 91ではomniboxのonInputChangedを使う場合に正常に動作しないことがわかりました。 利用したい場合は、しばらくはV2のままにしておく必要があります。
以上、どなたかの参考になれば幸いです。