Chrome Extensionでomnibox apiを使ってみる

Chromeでアドレスバーに検索文字列を入力してエンターを押すと現在開いているタブ上に検索結果が表示される。この動作が非常に気に食わなかったのでExtensionを作って新しいタブ上で検索結果が表示されるようにしてみようとやってみた。結果としては、そんなことはできないみたいだけどExtensionの基本的な作り方がわかった気がするので備忘録がてら書く。

サンプルを実行するまでの道のり

  • https://developer.chrome.com/extensions/samples#omniboxからサンプルをダウンロード&解凍
  • [設定]→[拡張機能]で拡張機能画面を開いて、画面右上の[デベロッパーモード]のチェックを付ける。
  • [パッケージ化されていない拡張機能を読み込む]で解凍したフォルダを選択

サンプルの中身(manifest.json)

{
  "name": "Create NewTab Enter Adress Bar",
  "version": "0.0.1",
  "description": "Create NewTab Enter Adress Bar",
  "background": {
    "scripts": ["background.js"]
  },
  "omnibox": { "keyword" : "omnix" },
  "manifest_version": 2
}

気になるところだけを抜粋。大体名前でわかる。

omnibox
omniboxを使うという宣言。アドレスバーに「omnix」と記載すると拡張機能が立ち上がる
manifest_version
どのバージョンのマニフェストファイルかを表してる模様。2で良い

サンプルの中身(background.js)

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This event is fired each time the user updates the text in the omnibox,
// as long as the extension's keyword mode is still active.
chrome.omnibox.onInputChanged.addListener(
  function(text, suggest) {
    console.log('inputChanged: ' + text);
    suggest([
      {content: text + " one", description: "the first one"},
      {content: text + " number two", description: "the second entry"}
    ]);
  });

// This event is fired with the user accepts the input in the omnibox.
chrome.omnibox.onInputEntered.addListener(
  function(text) {
    console.log('inputEntered: ' + text);
    alert('You just typed "' + text + '"');
  });

イベントに関数を設定してイベントが発生した時に呼んでくれる。onInputChangedは文字入力時、onInputEnteredはエンターキーをおした時。なので、「omnix」という文字列をアドレスバーに入力した後に何か文字を入れるとsuggestで登録したものが表示され、エンターキーを押すと入力した文字列がアラートで表示される。他にもAPIはあるみたいなので、詳しく知りたい方は以下のURLを参照のこと。

まとめ

つまりは、アドレスバーにkeywordで登録した文字列を入力しないと拡張機能が立ち上がらないので「検索文字列を入力してエンターを押すと検索結果を新しいタブで表示する」を実現するためにはkeywordで登録した文字列を一回入力する必要がある。「g」だったらGoogleで検索した結果を・・・とかも考えたけど、「g」という文字列を毎回押すぐらいならショートカットキーで新しいタブを開いて検索したほうが早いのであまり意味が無い。ChromeのExtensionを書くのが簡単だというのがわかっただけでもよしとしよう。