選択文字列を検索するChrome Extension
選択文字列をキーバインド一発でYahooなりGoogleなりで検索する方法が無いかなと思って探してみたけれども、意外と見つからなかったので作ってしまいました。
Chromeのデフォルトの機能として、選択文字列を右クリックすれば検索するメニューが表示されますが、この1アクションさえも面倒くさいと感じる人は少なくないと思います。
他にも選択文字列を検索するextensionはありますが、検索エンジンを選択するポップアップが表示されたりと、結局1アクション余分なものしか見つかりませんでした。
今回作ったExtensionの機能はシンプルなもので、文字列を選択した状態で「Command+Enter」を押せば、新しいタブでYahooでの検索結果が表示されるというものです。
https://github.com/mythosil/chrome-selection-search
ファイル構成
- chrome-selection-search/
- manifest.json
- selection-search.js
- background.js
manifest.json
{ "manifest_version": 2, "name": "Selection-Search", "description": "Search the selected words in a new tab", "version": "1.0", "background": { "persistent": false, "scripts": [ "background.js" ] }, "content_scripts": [{ "matches": [ "http://*/*", "https://*/*" ], "js": [ "selection-search.js" ] }] }
selection-search.js
window.addEventListener('keydown', function(e) { if (e.metaKey && e.keyCode == 13) { var text = window.getSelection().toString(); if (text.length > 0) { chrome.extension.sendMessage({ text: text }, function(response) {}); } } }, false);
macのCommandキーが押されていると、e.metaKeyがtrueとなります。
EnterキーのkeyCodeは13です。
この部分は好みのキーバインドに書き換えて使ってください。
background.js
chrome.extension.onMessage.addListener(function(req, sender, callback) { if (sender.tab) { // from a content script if (req.text !== undefined) { var url = encodeURI("http://search.yahoo.co.jp/search?ei=UTF-8&fr=crmas&p=" + req.text); var properties = { url: url }; chrome.tabs.create(properties, function(tab) {}); } } });
補足
content script内ではchrome.tabsがundefinedとなっているため、backgroundにメッセージを投げてタブ操作をさせるというややこしいことをしています。
実際は、こんなまわりくどいことをしなくても、window.openを使えばbackground.jsは不要です。
メッセージパッシングを使ってみたかっただけです。