Google Chrome Omnibox API - автоматически выбирает первую опцию при вводе

Поэтому я пытаюсь создать простое расширение Omnibox для Chrome для личного использования. Он работает как любое другое расширение Omnibox: вы вводите ключевое слово расширения и нажимаете вкладку, которая дает контроль над расширением омнибокса. Затем вы вводите фразу или еще много чего, и под омнибоксом появляется список предложений. Затем вы можете использовать клавиши со стрелками или мышь, чтобы выбрать предложение, а затем браузер перейдет на страницу, связанную с этим предложением. Все это прекрасно работает.

Тем не менее, я хотел бы, чтобы при нажатии кнопки ввода без выбора предложения я хотел бы, чтобы браузер перешел к первому предложению из списка предложений. Вместо того, что происходит прямо сейчас, я получаю эту страницу ошибки:

страница Chrome Error

Я не смог найти ответы в документации по этому вопросу. Вот как выглядит мой код прямо сейчас (в 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?

1 ответ

Решение

В 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});
        });
    }
);
Другие вопросы по тегам