地址栏建议
指定万能栏自定义
您通过在其 manifest.json 文件中包含 omnibox 键和触发关键字的定义,来告知您的扩展程序它将自定义地址栏建议。
json
"omnibox": { "keyword" : "cs" }
在扩展程序的后台 JavaScript 文件中,使用 omnibox.setDefaultSuggestion()
,您可以选择定义要在地址栏下拉菜单中显示的第一个建议。使用它来提供有关如何使用该功能的提示。
js
browser.omnibox.setDefaultSuggestion({
description: `Search the Firefox codebase
(e.g. "hello world" | "path:omnibox.js onInputChanged")`,
});
然后,您可以通过侦听 omnibox.onInputStarted
(在用户键入关键字和空格后分派)和 omnibox.onInputChanged
(在用户更新地址栏条目时分派)来添加提供自定义内容的代码。然后,您可以填充建议,在本例中,使用用户输入的术语构建 mozilla-central 的搜索。
js
browser.omnibox.onInputChanged.addListener((text, addSuggestions) => {
let headers = new Headers({ Accept: "application/json" });
let init = { method: "GET", headers };
let url = buildSearchURL(text);
let request = new Request(url, init);
fetch(request).then(createSuggestionsFromResponse).then(addSuggestions);
});
如果扩展程序使用 omnibox.setDefaultSuggestion()
设置了默认建议,则它将首先出现在下拉菜单中。
然后,扩展程序可以侦听用户单击其中一个建议,使用 omnibox.onInputEntered
。如果单击默认建议,则会返回用户的自定义术语,否则会返回建议的字符串。这还会传递有关用户处理新链接的浏览器首选项的信息。在下面的代码中,用户自定义术语用于创建搜索,否则将打开建议的 URL。
js
browser.omnibox.onInputEntered.addListener((text, disposition) => {
let url = text;
if (!text.startsWith(SOURCE_URL)) {
// Update the URL if the user clicks on the default suggestion.
url = `${SEARCH_URL}?q=${text}`;
}
switch (disposition) {
case "currentTab":
browser.tabs.update({ url });
break;
case "newForegroundTab":
browser.tabs.create({ url });
break;
case "newBackgroundTab":
browser.tabs.create({ url, active: false });
break;
}
});
示例
GitHub 上的 webextensions-examples 存储库包含 firefox-code-search 示例,它自定义了搜索栏。