jQuery リロード対策
jQueryでF5とCtrl + rを押したときのリロードを停止
リロード自体を止める。ブラウザのリロードボタンと右クリックで表示されたメニュー内の更新は対象外。
jQuery
$(function () {
var beforecode;
$(document).on('keydown',function(e){
var keycode = (e.keyCode ? e.keyCode : e.which);
// F5(116)、Ctrl + r(17+82)
if (keycode == 116
|| keycode == 17 && beforecode == 82
|| keycode == 82 && beforecode == 17) {
// 中断
return false;
}
beforecode = keycode;
});
});
リロード時の処理を制御。
jQuery
$(function () {
// F5、Ctrl + r、ブラウザのリロードボタン、右クリックで表示されたメニューから再読み込み
if (window.performance.navigation.type === 1) {
// 中断
return false;
}
});
戻るボタンの抑制には、Backspace: 8、Alt + ←: 18+37 を指定。
HTML5 History APIで履歴操作。
jQuery
$(function () {
var beforecode;
$(document).on('keydown',function(e){
var keycode = (e.keyCode ? e.keyCode : e.which);
// inputやtextareaでのBackspaceは無効にしない
var tagname = $(e.target).prop('tagName');
if (keycode == 116
|| keycode == 17 && beforecode == 82
|| keycode == 82 && beforecode == 17
|| keycode == 8 && (tagname != 'INPUT' && tagname != 'TEXTAREA')
|| keycode == 18 && beforecode == 37
|| keycode == 37 && beforecode == 18) {
// 中断
return false;
}
beforecode = keycode;
});
// 自分自身を履歴に追加
history.pushState(null, null, null);
$(window).on('popstate', function(){
history.pushState(null, null, null);
});
});
Chrome52からBackspaceでブラウザバックできないようになりました。