Firefoxの拡張、FireGestureで辞書サイトのweblioを引くスクリプトです。
Firefoxにマウスジェスチャーをつけ加えるFireGestureを入れている方は大勢いると思います。
私も愛用者の一人ですが、辞書サイトの文字が簡単に引けないかと普段より思っており、色々ためしてやっと満足のできるスクリプトができました。今回は辞書サイトはweblioで紹介致します。コードを見ていただければ、分かりますように、web上に落ちているコードの切れ端を集め、作りました。
機能としては、引きたい単語を選択しておいて、スクリプトを登録しておいたマウスジェスチャーを行います。文字列が選択されていない場合は、クリップボードの中身で検索します。これにより、他のソフトで表示されている単語をコピーして、Firefoxのウィンドに切り替えたら、マウスジェスチャーで検索できるようになってます。
いくつも同じweblioのタブが開くのはウザったいので、既に開かれている場合は、そのウィンドウの、そのタブで開きます。機能を順番に表示するとこうなります。
ジェスチャーの登録やコードの指定の仕方はほかのサイトを参照ください。まあ、このサイトをよくご覧になっている方なら、お茶の子さいさいでしょう。
const URL = "http://ejje.weblio.jp";
const SearchURL = "/content/"
var sel = FireGestures.getSelectedText();
var clip = readFromClipboard();
if (sel)
openAndReuseOneTabPerURL(sel);
else if(clip)
openAndReuseOneTabPerURL(clip);
return;function openAndReuseOneTabPerURL(str) {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser"); // 必要としている URL を開いている browser が無いか確認する
var found = false;
while (!found && browserEnumerator.hasMoreElements()) {
var browserInstance = browserEnumerator.getNext().gBrowser; // browser インスタンスの全てのタブを確認する
var numTabs = browserInstance.tabContainer.childNodes.length;
for(var index=0; index<numTabs; index++) {
var currentBrowser = browserInstance.getBrowserAtIndex(index);
if (currentBrowser.currentURI.spec.indexOf(URL,0)>-1) { // URL はすでに開いています。タブを選択します。
browserInstance.selectedTab = browserInstance.tabContainer.childNodes[index]; // この browser にフォーカスを移す
browserInstance.focus();
browserInstance.loadURI(URL+SearchURL+str);
found = true;
break;
}
}
} // URL が開かれてないので新たに開く
if (!found) {
var recentWindow = wm.getMostRecentWindow("navigator:browser");
if (recentWindow) {
// 既存のブラウザウィンドウを利用する
recentWindow.delayedOpenTab(URL+SearchURL+str, null, null, null, null);
}
else {
// すでに開いている browser ウィンドウがないので、新たに開く
window.open(URL+SearchURL+str);
}
}
}
コードを見ていただけると分かりますが、URLがweblioのURLです。
検索文字列の指定は
http://ejje.weblio.jp/content/検索文字列
になっています。トップページのURLと検索文字列の間の"/content"をSearchURL定数で指定してあります。
ですから、URLとSearchURLの部分を自分の使いたい検索サイトに変更すれば、どこにでも応用できることでしょう。
まあ、オンマウスでポップアップさせるのもいいんですが、weblioは、多少のタイプミスでも候補を探してくれますし、変化形の場合は原型へのリンクを表示してくれるので、便利なんですよね。
ALCの英辞郎もやれそうですね。検索文字列がURLの途中なので、少しコードを弄る必要があります。URLの指定は3箇所です。ただ、こうした使い方が許されているのかどうか、分からないので、直接コードは書きませんよ。皆さんで工夫してください。
追加:ちなみにGoogleを引く場合です。こちらのほうがコードがちょっとだけ綺麗です。
const URL = "http://www.google.co.jp";
const SearchURL1 = "/search?q="
const SearchURL2 = ""
var sel = FireGestures.getSelectedText();
var clip = readFromClipboard();
if (sel)
openAndReuseOneTabPerURL(sel);
else if(clip)
openAndReuseOneTabPerURL(clip);
return;
function openAndReuseOneTabPerURL(str) {
// 全URLの組み立て
var searchURL = URL+SearchURL1+str+SearchURL2;
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
// 必要としている URL を開いている browser が無いか確認する
var found = false;
while (!found && browserEnumerator.hasMoreElements()) {
var browserInstance = browserEnumerator.getNext().gBrowser;
// browser インスタンスの全てのタブを確認する
var numTabs = browserInstance.tabContainer.childNodes.length;
for(var index=0; index<numTabs; index++) {
var currentBrowser = browserInstance.getBrowserAtIndex(index);
if (currentBrowser.currentURI.spec.indexOf(URL,0)>-1) {
// URL はすでに開いています。タブを選択します。
browserInstance.selectedTab = browserInstance.tabContainer.childNodes[index];
// この browser にフォーカスを移す
browserInstance.focus();
browserInstance.loadURI(searchURL);
found = true;
break;
}
}
}
// URL が開かれてないので新たに開く
if (!found) {
var recentWindow = wm.getMostRecentWindow("navigator:browser");
if (recentWindow) {
// 既存のブラウザウィンドウを利用する
recentWindow.delayedOpenTab(searchURL, null, null, null, null);
}
else {
// すでに開いている browser ウィンドウがないので、新たに開く
window.open(searchURL);
}
}
}
| いま、このサイトが載っているサーバーは危険なんです< 前 | 次 >11.3でCapsLockとCtrlをGUIで切り替える |
|---|
| < 前 | 次 > |
|---|