dataスキームって文字列ならbase64しなくても使えるんですね。知らなかった。よくよく考えてみればなるほどです。ただ、encodeURIComponentは必要。で、こんなBookmarkletを作ってみた。
/*
================================================================================
Name : 選択範囲を保存するBookmarklet Ver1.0.0
In : [none]
Out : [none]
Note : 選択範囲の文字列を保存します。
--------------------------------------------------------------------------------
Version : Ver1.0.0 | 2009/01/10 | 新規作成
--------------------------------------------------------------------------------
License : MIT license
URL : www.kanasansoft.com
================================================================================
*/
(
function(){
var
w=window
,d=w.document
,s=""
;
if(d.selection){
s=d.selection.createRange().text
}else if(d.getSelection){
s=d.getSelection()
}else if(w.getSelection){
s=w.getSelection()
}
location.href="data:application/octet-stream,"+encodeURIComponent(s)
}
)
()
================================================================================
Name : 選択範囲を保存するBookmarklet Ver1.0.0
In : [none]
Out : [none]
Note : 選択範囲の文字列を保存します。
--------------------------------------------------------------------------------
Version : Ver1.0.0 | 2009/01/10 | 新規作成
--------------------------------------------------------------------------------
License : MIT license
URL : www.kanasansoft.com
================================================================================
*/
(
function(){
var
w=window
,d=w.document
,s=""
;
if(d.selection){
s=d.selection.createRange().text
}else if(d.getSelection){
s=d.getSelection()
}else if(w.getSelection){
s=w.getSelection()
}
location.href="data:application/octet-stream,"+encodeURIComponent(s)
}
)
()
これまでnetで見つけた文章を保存したい時、「[文章を選択]=>[コピー]=>[editorを開く]=>[ペースト]=>[保存]」ってしてて、印刷みたいに「選択範囲を保存」ってのが欲しいなぁって思った事もあったけど、これなら「[文章を選択]=>[Bookmarklet実行]=>[保存]」でいける。ちょっと試しに使ってみたけど便利すぎる。まじでお勧め。ファイル名も指定できれば良いんだけどFirefoxの場合、eventを生成して要素にdispatchしてもhrefの中は解釈してくれないようなので、元記事にあるmalaさんの方法が使えない。後は、textareaなんかに対応したバージョンがあればもっと便利かも。その辺はよく知らないので機会があれば調べて実装するかも。誰か作ってくれないかな。