途中まで書いた記事が失われる事故を未然に防ぐgreasemonkey

幸いなことに私はまだこの事故に遭っていないけど、きっと必要とされている機能のはず。

これはなに?

日記を書くページと下書きを編集するページで、記事を書いている途中に誤ってリンクを飛ばないよう確認アラートを表示するgreasemonkeyスクリプトです。

どうやってつかうの?

firefox限定。
firefoxのアドオンであるgreasemonkeyをインストールしてから下にある、hatena_diary_confirm.user.jsをクリックするとインストールできます。

ソースコード

// ==UserScript==
// @name           hatena_diary_confirm
// @namespace      http://d.hatena.ne.jp/Cherenkov/
// @include http://d.hatena.ne.jp/*/edit*
// @include http://d.hatena.ne.jp/*/draft?epoch=*
// ==/UserScript==

var link = document.evaluate("//a[not(@target='_blank')]", document, null, 7, null);
for(var i=0;i<link.snapshotLength;i++){
    link.snapshotItem(i).setAttribute("onclick","if( !confirm('ページ遷移しますがよろしいですか') ) { return false; }");
}

解説

  • リンクを抽出して、そのすべてにクリック時に動作するイベントをセットする。簡易的だ。

注意

  • リロード、ページ閉じるときには何もいってくれない。

ググッたらこんなのもあった。
ページ遷移前に確認をする、onbeforeunload - FAX
onbeforeunloadをつかってみる。

onbeforeunloadを取り入れたソースコード

// ==UserScript==
// @name           hatena_diary_confirm
// @namespace      http://d.hatena.ne.jp/Cherenkov/
// @include        http://d.hatena.ne.jp/*/edit*
// @include        http://d.hatena.ne.jp/*/draft?epoch=*
// ==/UserScript==

unsafeWindow.onbeforeunload = function(event){
  event = event || window.event; 
  event.returnValue = 'このダイアリーは保存されていない可能性があります。';
}

解説

  • onbeforeunloadを使えばスマートにかける。googleドキュメントで表示される確認と同じ!
  • ページ遷移、リロード、ページを閉じる、を感知してどうするか確認してくれる。
  • 詳細編集でプレビューをみるときもいちいち確認される。これはうざい。
  • 下書き保存などするときも確認される。ピンポイントでこのイベントをはずすように書けばいいのかも。めんどくさそう。

どっちにするか

onbeforeunloadのほうがかっこいいけど、今回は緊急性が高い*1ので簡易的でも目的の動作をしてくれる前者を採用します。

インストール

hatena_diary_confirm.user.js

感想

  • googleドキュメントみたくページ遷移する前に保存する機能とか考えたけど、まずは確認アラート*2だなとおもった。
  • とりあえず公開して反応をみる。
  • gistにアップしているのでスーパーハッカーが現れて書き換えてくれるかもしれない。

ほかにも

これを気にいろんなとこを確認するといいと思う。

ajaxとかもスルスルと処理が進むのはいいけど、あれー確認もしないのー?っていうことあるよね。

*1:もの凄い言い訳

*2:confirmだけども