2013-06-20 3 views
9

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

Однако, что бы я хотел сделать, так это то, что когда я нажимаю кнопку ввода, не выбирая предложение, я бы хотел, чтобы браузер перешел к первому предложению из списка предложений. Вместо этого, что происходит прямо сейчас, я получаю эту страницу с ошибкой: http://cl.ly/Pn0F/omnnibox.PNG

В документации по этому вопросу не найдено ответов. Это то, что мой код выглядит как сейчас (в 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 omnibox? Спасибо за любую помощь.

ответ

12

В пределах chrome.omnibox.onInputChanged.addListener(), вы хотите позвонить по телефону chrome.omnibox.setDefaultSuggestion().

Поэтому, когда вы вводите что-то в Omnibox, вы хотите, чтобы первое предложение стало предложением по умолчанию (так что вам не нужно нажимать стрелку вниз), а затем любые остальные предложения, как обычно.


Пример:

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}); 
     }); 
    } 
); 
+1

Это то, что я думал, как хорошо, но я не могу показаться, чтобы иметь возможность установить URL в объект передается setDefaultSuggestion(), только описание. Разум показывает мне пример, если это возможно? –

+0

Добавлен пример для вас! 'setDefaultSuggestion' предназначен только для показа, поскольку он не передает ничего значимого. Поэтому, если «текст» пользователя не похож на URL-адрес, вы можете предположить, что они выбрали предложение по умолчанию, например reddit.com (в вашем коде в любом случае). –