レ点腫瘍学ノート

pukiwikiカスタマイズ箇所/2022/編集画面からのページ移動時にアラートを表示する の履歴ソース(No.1)

#author("2022-08-22T18:29:11+09:00;1970-01-01T18:00:00+09:00","default:tgoto","tgoto")
Pukiwikiでページ編集中の予期せぬページ移動やリロードで書きかけの文章が消えてしまって泣きを見た人は少なくないはず。javascriptを利用してページ遷移時にアラートが出るようにして、このダメージを少しでも起こりにくくする方法を記載しておく。

lib/html.phpを改装してアラート表示のjavascriptを実装する。

* 準備 [#ze3f2525]

429行目(submit/preview)と430行目(submit/write)に onclick="window.onbeforeunload = null;" を追加して下記のようにする。

*** 改変前 [#a15358f2]

>
<input type="submit" name="preview" value="$btn_preview" accesskey="p" />
<input type="submit" name="write"   value="$_btn_update" accesskey="s" />

*** 改変後 [#nf0ae1d3]

>
<input type="submit" name="preview" value="$btn_preview" accesskey="p" onclick="window.onbeforeunload = null;" />
<input type="submit" name="write"   value="$_btn_update" accesskey="s" onclick="window.onbeforeunload = null;" />

これがなくても作動しますが、本来の「プレビュー」「送信する」をクリックした場合にはアラートが表示されないほうが期待した動作に合致するので、この2つのボタンでページ移動する時のみ警告を表示しないようにしている。

* スクリプト本体 [#j06510d8]

444行目にページ遷移時の警告を表示するscriptを挿入して下記のようにする。

*** 改変前 [#e482c68e]

>
$body .= '<ul><li><a href="' .
		get_page_uri($rule_page) .
		'" target="_blank">' . $_msg_help . '</a></li></ul>';

*** 改変後 [#s04b99ed]

>
$body .= '<ul><li><a href="' .
		get_page_uri($rule_page) .
		'" target="_blank">' . $_msg_help . '</a></li></ul><script>
window.onbeforeunload = function(e) {
	e = e || window.event
	return e.returnValue = "他のページに移動します。よろしいですか?";
}</script>';