2008
09-20
14:37
2008-09-22 12:40 追記
下のコードだと,どうやら Safari で取得できなかったみたいですね.
document.getSelection() || window.getSelection() の部分の document と window を入れ替えてみたところ,取得できました.
ということで,ソースコードを修正しておきました.
はじめに
つまり 「あるページとそのページ内のテキストボックス・テキストエリアにおける選択文字列を取得する」 ということになりますかね.
岩家ぶろぐ » [javascript] bookmarklet で選択文字列を取得する件で
以前に書いたコードを見直したところ結構無駄があったので,書き直してみました.
書き直したソースコード
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 | var get_selected_text = function() { var ret = ''; try { //ret = ( document.getSelection() || window.getSelection() || '' ).toString(); // document.getSelection はFirefox,Operaで動作,window.getSelectionはSafariで動作 // del: 2008-09-22 12:40:00+09:00 ret = ( window.getSelection() || document.getSelection() || '' ).toString(); // document.getSelection はFirefox,Operaで動作,window.getSelectionはSafariで動作 // ins: 2008-09-22 12:40:00+09:00 if( ret ) { return ret; } } catch( e ) { return ret; } var tagnames = [ 'input', 'textarea' ]; for( var i = 0; i < tagnames.length; i++ ) { var elements = document.getElementsByTagName( tagnames[ i ] ); for( var j = 0; j < elements.length; j++ ) { var e = elements[ j ]; if( e.tagName == 'input' && e.type.toLowerCase() != 'text' ) { continue; } var sel_start = (function(){ try { return e.selectionStart; } catch( e ) { return 0; } })() , sel_end = (function(){ try { return e.selectionEnd; } catch( e ) { return 0; } })() ; if( sel_start == sel_end ) { continue; } return e.value.substring( sel_start, sel_end ); } } return ret; }; |
簡単な解説
var selected_text = get_selected_text(); のようにすることで,アクティヴなウィンドウ上,テキストボックス,テキストエリアのいずれかにおける選択文字列を取得します.
おわりに
例外発生を確認できたところに対してのみ try-catch 構文を使っていますが,細かくは動作検証していません.
なお,IEは起動すらしていません.あしからず...




読みはいわた.名古屋市在住.
このエントリへのトラックバック
トラックバック URI
http://blog.iwa-ya.net/2008/09/20/143725/trackback
このエントリへのトラックバックはまだありません.
このエントリへのコメント »
このエントリへのコメントはまだありません.