13

所以我正在尝试为个人使用的 Chrome 构建一个简单的 Omnibox 扩展。它与任何其他多功能框扩展程序一样工作:您输入扩展程序关键字并按 Tab,这将提供多功能框的扩展程序控制。然后你输入一个短语或诸如此类的东西,然后在多功能框下方弹出一个建议列表。然后,您可以使用箭头键或鼠标选择建议,然后浏览器导航到与该建议关联的页面。所有这些都非常好。

但是,我想做的是,当我在没有选择建议的情况下按 Enter 键时,我希望浏览器转到建议列表中的第一个建议。相反,现在发生了什么,我得到了这个错误页面:

铬错误页面

我在有关此的文档中找不到任何答案。这就是我的代码现在的样子(在 中background.js):

chrome.omnibox.onInputChanged.addListener(
    function(text, suggest)
    {
        text = text.replace(" ", "");
        suggest([
            { content: "http://reddit.com/r/" + text, description: "reddit.com/r/" + text },
            { content: "http://imgur.com/r/" + text, description: "imgur.com/r/" + text }
        ]);
    }
);

chrome.omnibox.onInputEntered.addListener(
    function(text)
    {
        chrome.tabs.getSelected(null, function(tab)
        {
            chrome.tabs.update(tab.id, {url: text});
        });
    }
);

chrome.omnibox.setDefaultSuggestion({ description: "visit /r/%s" });

那么有没有办法在没有选择建议的情况下按下回车键来设置默认操作?有点像自定义搜索功能默认在 Chrome 多功能框中工作?

4

1 回答 1

18

在 内chrome.omnibox.onInputChanged.addListener(),你会想打电话chrome.omnibox.setDefaultSuggestion()

因此,当您在多功能框中键入内容时,您会希望将第一个建议设为默认建议(这样您就不必按向下箭头),然后suggest()像正常一样将任何剩余的建议设为默认建议。


例子:

chrome.omnibox.onInputChanged.addListener(
    function(text, suggest)
    {
        text = text.replace(" ", "");

        // Add suggestions to an array
        var suggestions = [];
        suggestions.push({ content: "http://reddit.com/r/" + text, description: "reddit.com/r/" + text });
        suggestions.push({ content: "http://imgur.com/r/" + text, description: "imgur.com/r/" + text });

        // Set first suggestion as the default suggestion
        chrome.omnibox.setDefaultSuggestion({description:suggestions[0].description});

        // Remove the first suggestion from the array since we just suggested it
        suggestions.shift();

        // Suggest the remaining suggestions
        suggest(suggestions);
    }
);

chrome.omnibox.onInputEntered.addListener(
    function(text)
    {
        chrome.tabs.getSelected(null, function(tab)
        {
            var url;
            if (text.substr(0, 7) == 'http://') {
                url = text;

            // If text does not look like a URL, user probably selected the default suggestion, eg reddit.com for your example
            } else {
                url = 'http://reddit.com/r/' + text;
            }
            chrome.tabs.update(tab.id, {url: url});
        });
    }
);
于 2013-06-22T00:27:07.370 回答