omnibox

omnibox是向用户提供搜索建议的一种方式。先来看个gif图以便了解一下这东西到底是个什么鬼:

omnibox - 图1

注册某个关键字以触发插件自己的搜索建议界面,然后可以任意发挥了。

首先,配置文件如下:

  1. {
  2. // 向地址栏注册一个关键字以提供搜索建议,只能设置一个关键字
  3. "omnibox": { "keyword" : "go" },
  4. }

然后background.js中注册监听事件:

  1. // omnibox 演示
  2. chrome.omnibox.onInputChanged.addListener((text, suggest) => {
  3. console.log('inputChanged: ' + text);
  4. if(!text) return;
  5. if(text == '美女') {
  6. suggest([
  7. {content: '中国' + text, description: '你要找“中国美女”吗?'},
  8. {content: '日本' + text, description: '你要找“日本美女”吗?'},
  9. {content: '泰国' + text, description: '你要找“泰国美女或人妖”吗?'},
  10. {content: '韩国' + text, description: '你要找“韩国美女”吗?'}
  11. ]);
  12. }
  13. else if(text == '微博') {
  14. suggest([
  15. {content: '新浪' + text, description: '新浪' + text},
  16. {content: '腾讯' + text, description: '腾讯' + text},
  17. {content: '搜狐' + text, description: '搜索' + text},
  18. ]);
  19. }
  20. else {
  21. suggest([
  22. {content: '百度搜索 ' + text, description: '百度搜索 ' + text},
  23. {content: '谷歌搜索 ' + text, description: '谷歌搜索 ' + text},
  24. ]);
  25. }
  26. });
  27. // 当用户接收关键字建议时触发
  28. chrome.omnibox.onInputEntered.addListener((text) => {
  29. console.log('inputEntered: ' + text);
  30. if(!text) return;
  31. var href = '';
  32. if(text.endsWith('美女')) href = 'http://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=' + text;
  33. else if(text.startsWith('百度搜索')) href = 'https://www.baidu.com/s?ie=UTF-8&wd=' + text.replace('百度搜索 ', '');
  34. else if(text.startsWith('谷歌搜索')) href = 'https://www.google.com.tw/search?q=' + text.replace('谷歌搜索 ', '');
  35. else href = 'https://www.baidu.com/s?ie=UTF-8&wd=' + text;
  36. openUrlCurrentTab(href);
  37. });
  38. // 获取当前选项卡ID
  39. function getCurrentTabId(callback)
  40. {
  41. chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
  42. {
  43. if(callback) callback(tabs.length ? tabs[0].id: null);
  44. });
  45. }
  46. // 当前标签打开某个链接
  47. function openUrlCurrentTab(url)
  48. {
  49. getCurrentTabId(tabId => {
  50. chrome.tabs.update(tabId, {url: url});
  51. })
  52. }