Google Chrome Omnibox API - автоматически выбирает первую опцию при вводе
Поэтому я пытаюсь создать простое расширение Omnibox для Chrome для личного использования. Он работает как любое другое расширение Omnibox: вы вводите ключевое слово расширения и нажимаете вкладку, которая дает контроль над расширением омнибокса. Затем вы вводите фразу или еще много чего, и под омнибоксом появляется список предложений. Затем вы можете использовать клавиши со стрелками или мышь, чтобы выбрать предложение, а затем браузер перейдет на страницу, связанную с этим предложением. Все это прекрасно работает.
Тем не менее, я хотел бы, чтобы при нажатии кнопки ввода без выбора предложения я хотел бы, чтобы браузер перешел к первому предложению из списка предложений. Вместо того, что происходит прямо сейчас, я получаю эту страницу ошибки:
Я не смог найти ответы в документации по этому вопросу. Вот как выглядит мой код прямо сейчас (в 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});
});
}
);