javascript - for - developer chrome extension
API de Google Chrome Omnibox: seleccione automáticamente la primera opción al ingresar (1)
Así que estoy tratando de construir una extensión Omnibox simple para Chrome para uso personal. Funciona como cualquier otra extensión de Omnibox: ingresa la palabra clave de la extensión y presiona tab, que le da el control de extensión del omnibox. A continuación, escriba una frase o lo que sea y aparecerá una lista de sugerencias debajo del cuadro multifunción. Luego puede usar las teclas de flecha o el mouse para seleccionar una sugerencia y luego el navegador navega a la página asociada con esa sugerencia. Todo eso funciona perfectamente bien.
Sin embargo, lo que me gustaría hacer es que cuando presiono Enter sin haber seleccionado una sugerencia, me gustaría que el navegador vaya a la primera sugerencia de la lista de sugerencias. En cambio, lo que sucede ahora mismo, aparece esta página de error: http://cl.ly/Pn0F/omnnibox.PNG
No pude encontrar ninguna respuesta en la documentación sobre esto. Así es como se ve mi código en este momento (en 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" });
Entonces, ¿hay alguna manera de establecer la acción predeterminada cuando se presiona enter sin que se seleccione una sugerencia? ¿Algo así como la funcionalidad de búsqueda personalizada funciona por defecto en el omnibox de Chrome? Gracias por cualquier ayuda.
Dentro de chrome.omnibox.onInputChanged.addListener()
, querrás llamar a chrome.omnibox.setDefaultSuggestion()
.
Entonces, cuando escribe algo en el Omnibox, querrá hacer que la primera sugerencia se convierta en la sugerencia por defecto (para que no tenga que presionar la flecha hacia abajo), y luego suggest()
cualquier sugerencia restante como normal.
Ejemplo:
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});
});
}
);