はじめに
こちらのエントリ と昨日 in-box (GTD的な意味で) に入れたメモにインスパイアされて,ちょっと作ってみました.
何を?
Webページ上の任意のテキストをマウスで選択すると,勝手に Weblio を新しいウィンドウ or タブで開いてその文字列について調べにいく,というアクションを起こすためのブックマークレットです.
まずはお試し
1.JavaScript を読み込む
次のリンクをクリックすることで,先に書いたアクションを起こすための JavaScript を読み込みます.
2.任意のテキストを選択する
本エントリの適当な文字列をマウスドラッグで選択します.この段階では,マウスのボタンは押したままにしていてください.
3.Controlキーを押したままマウスボタンをはなす
Controlキーを押し,そのままの状態でマウスボタンをはなします.
要は,マウスボタンをはなすときに Controlキーが押されている状態であればOKです.
4.Weblio が開く
選択した文字列についての Weblio のページが開きます.
ブックマークレットとして使う
先のリンクをブックマークレットとして登録することで,任意のページのテキストについて同様のことができるかと思います.
その他
現在,Opera 9,Firefox 2,Safari 3 にて動作を確認しています.また,Internet Explorer 6 で動作しないことも確認しています.
また,フレームを越えた文字列については対応していません.(ですが,希望のフレームをアクティブにした後にブックマークレットを実行することで解決するかもです.)
選択文字列の取得方法については以下を参考にしていますので,詳細はそちらをご覧ください.
おわりに
言葉を調べたりする際のほんのちょっとしたツールとなれば幸いです.
また,行き先を Weblio から他のサイトに変えてみることで別の使い方ができるかも,です.
おまけ: ソースコード
ブックマークレット実行時に読み込むJavaScriptのソースコードを以下に示しておきます.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | ( function() { /*--------------------------------------------------------------------------------*/ var d = document; /** * * jQuery のロードを開始する * **/ if( typeof jQuery == 'undefined' ) { var e = d.createElement( 'script' ); e.type = 'text/javascript'; e.src = 'http://iss.ms/js/lib/jquery-1.2.3.pack.js'; e.charset = 'utf-8'; d.body.appendChild( e ); } /** * * 以下,jQuery がロードされた後に実行される関数 * **/ var jQueryLoaded = function() { var b = $( d.body ); // body b.mouseup( function( e ) { var text = getSelection(); if( e.ctrlKey && text ) { window.open( 'http://www.weblio.jp/content/' + text, 'iss.ms/selectnsearch' ); } } ); /** * * 選択文字列を取得する * * **/ var getSelection = function() { return getSelectedText( window ) || ''; function getSelectedText( w ) { var t = ''; try { t = w.getSelection().toString(); } catch(e) { return; } if( t ) { return t; } else { var ties = getTextInputElements( w ); for(var i = 0; i < ties.length; i++ ) { var tie = ties[i]; var s = tie.selectionStart; var e = tie.selectionEnd; if( s != e ) { return tie.value.substr( s, e-s ); } } } return t; } function getTextInputElements( w ) { var elms = w.document.getElementsByTagName( '*' ); var ties = []; for( var i = 0, e; e = elms[i]; i++ ){ var tag = e.tagName.toLowerCase(); if( tag == 'textarea' ) { ties[ties.length] = e; } else if( tag == 'input' ) { var ty = e.type.toLowerCase(); if ( !ty || ty == 'text' ) { ties[ties.length] = e; } } } return ties; } }; }; /** * * jQuery がロードされるまで待機 * */ var wait4jQuery = function() { if( typeof( jQuery ) == 'undefined' ) { setTimeout( wait4jQuery, 0 ); } else { jQueryLoaded(); } }; wait4jQuery(); return; /*--------------------------------------------------------------------------------*/ } )(); |



