Railsアプリにブックマークレットを実装する
SBMなどのWebアプリケーションには欠かせないブックマークレットですが
Railsで作ったアプリに付け加えてみたいなあと考えていました。
プラグイン
とりあえず探してみると、下のようなプラグインを見つけました。
Bookmark It! Rails plugin for adding bookmarklets.
http://blog.nanorails.com/articles/2006/12/18/bookmark-it-rails-plugin-for-adding-bookmarklets
しかし、古めの記事だったのと、面倒くさそうだったので今回は回避しました。
使ったことがある方がいれば感想が聞きたいです。
コントローラに書き加える方法
次に発見したのがこの記事です。
Creating and Integrating Bookmarklets with Rails
http://railstips.org/2008/11/13/creating-and-integrating-bookmarklets-with-rails
直にコントローラに書き込むことで実装しています。
丁寧にもサンプルムービーもあり、手軽そうだったのでこの方法を試すことにしました。
Creating and Integrating Bookmarklets with Rails
http://video.railstips.org/creating-and-integrating-bookmarklets-with-rails/
ブックマークレットの実装
上のページを参考に実装を紹介します。
ビュー
まずは、ブックマークレットの本体を用意します。
index.html.erbなど適当なところに貼り付けます。
<p> <a href="javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f= 'http://<%= request.host_with_port %>/bookmarks/new',l=d.location,e=encodeURIComponent,p='?v=1&u='+e(l.href)%20+'&t='+e(d.title.replace(/^\s*|\s*$/g,''))%20+'&s='+e(s),u=f+p;location.href=u;"> ブックマークする </a> </p>
コントローラ
次にコントローラに受け手の役目のコードを書きます。
SBMの場合、ブックマークレットを押すとフォームに入力されていればよいので
scaffoldで生成したコードだと、newメソッドなどに書き加えます。
@bookmark.title = params[:t] @bookmark.content = params[:s] @bookmark.url = params[:u]
これは先ほどのブックマークレットに改行を加えたものです。
<p> <a href="javascript:var d=document, w=window, e=w.getSelection, k=d.getSelection, x=d.selection, s=(e?e():(k)?k():(x?x.createRange().text:0)), f= 'http://<%= request.host_with_port %>/bookmarks/new', l=d.location, e=encodeURIComponent, p='?v=1&u='+e(l.href)%20+'&t='+e(d.title.replace(/^\s*|\s*$/g,''))%20+'&s='+e(s), u=f+p; location.href=u; "> ブックマークする </a> </p>
uにURLを、tにタイトル、sに選択範囲が渡されていることがわかります。
これらのパラメータを調整することで、使い方は色々考えれそうです。