Hatena::Grouporera

もし高校野球の女子マネージャーがOpera Browserを使ったら

logo
 | 

2010-09-02

"mailto:" リンクのパーセントエスケープがページのエンコーディングに影響される

| 12:55

ただ、ここのブログサイトで試してみると文字化けしてしまうので

http://d.hatena.ne.jp/akizuki_b/20100815/1281876472

調べてみた。

javascript:location.href='mailto:?subject='+encodeURIComponent(document.title);

これを UTF-8 なサイト (はてなグループダイアリーなど) で使うと文字化けしないが、EUC-JP なサイト (はてなダイアリーなど) で使うと文字化けする。

同じ URL なんだからどっから開いても同じであるべきだと思うんだけど。

とりあえずの解決策としては、UTF-8 のページから開いてやればいいってことで

javascript:void+window.open('data:text/html;charset=utf-8,<meta http-equiv="refresh" content="0; url=mailto:?subject='+encodeURIComponent(document.title)+'" />')

のように間を挟んでやればいい。空白タブが開いてしまうのが難点だが。

Evernote に送信だったらこんな感じかな。

javascript:(function(w,d,e,s,g,p,n){if(d[p]){s=d[p].createRange().text}else if(d[g]){s=d[g]()}else if(w[g]){s=w[g]()}var t=d.title,b=t+n+location.href+n;if(s){b+=n+s+n}window.open('data:text/html;charset=utf-8,<meta http-equiv="refresh" content="0; url=mailto:******@m.evernote.com?subject='+e(e(t.replace(/"/g,'%22')))+'&body='+e(e(b.replace(/"/g,'%22')))+'" />')})(window,document,encodeURIComponent,'','getSelection','selection','\r\n')

Opera Mail の場合だとこれでうまくいくんだけど、システム・デフォルトの Windows Live Mail で開くようにするとこれでも文字化け…どうやら本文部分のデフォルトエンコーディングが Latin-1 になってるっぽいな。Windows Live Mail の設定をするのが面倒なのでパス。


さらに、Opera の Go to page アクション内ではダブルクオートとかが使えなかったりするので、

Go to page, "javascript:(function(w,d,e,s,g,p,n){if(d[p]){s=d[p].createRange().text}else if(d[g]){s=d[g]()}else if(w[g]){s=w[g]()}var t=d.title,b=t+n+location.href+n;if(s){b+=n+s+n}window.open('data:text/html;charset=utf-8,<meta http-equiv=\x22refresh\x22 content=\x220; url=mailto:******@m.evernote.com?subject='+e(e(t.replace(/\x22/g,'\x2522')))+'&body='+e(e(b.replace(/\x22/g,'\x2522')))+'\x22 />')})(window,document,encodeURIComponent,'','getSelection','selection','\r\n')"

でいけると思う。


ところで、

Opera Mail じゃなくて Gmail を使いたい人は

  • http://mail.google.com/mail/?view=cm&fs=1&to=****&su=****&body=****&cc=****&bcc=****

でもいい。(参考: The Opera blog)

ブックマークレットだったら

javascript:(function(w,d,e,s,g,p,n){if(d[p]){s=d[p].createRange().text}else if(d[g]){s=d[g]()}else if(w[g]){s=w[g]()}var t=d.title,b=t+n+location.href+n;if(s){b+=n+s+n}window.open('http://mail.google.com/mail/?view=cm&fs=1&to=******@m.evernote.com&su='+e(t)+'&body='+e(b))})(window,document,encodeURIComponent,'','getSelection','selection','\r\n')

となる。

使ってみたけど、選択範囲がちょっと大きいと Google さんに "URL is too large" と言われてしまった。


バグレポ書いた

  • DSK-312177

テストページ

 |