地址栏建议

使用 omnibox API,扩展程序可以自定义浏览器地址栏下拉菜单中提供的建议,用户在其中输入关键字时。

Example showing the result of the firefox_code_search WebExtension's customization of the address bar suggestions.

这使您的扩展程序能够例如搜索免费电子书库,或者如上例所示,搜索代码示例存储库。

指定万能栏自定义

您通过在其 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 示例,它自定义了搜索栏。