10 ответов:
обновление недавний комментарий утверждает, что это не работает в новом Chrome ... Как показано в jsFiddle и протестировано на моем личном сайте, этот метод по-прежнему работает с Chrome ver
26.0.1410.64 mэто действительно легко в jQuery кстати:
// slight update to account for browsers not supporting e.which function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); }; // To disable f5 /* jQuery < 1.7 */ $(document).bind("keydown", disableF5); /* OR jQuery >= 1.7 */ $(document).on("keydown", disableF5); // To re-enable f5 /* jQuery < 1.7 */ $(document).unbind("keydown", disableF5); /* OR jQuery >= 1.7 */ $(document).off("keydown", disableF5);на боковой ноте: Это только отключает кнопку F5 на клавиатуре. Чтобы действительно отключить обновление, вы должны использовать сценарий на стороне сервера для проверки изменения состояния страницы. Не могу сказать, что я действительно знаю, как это сделать, поскольку я еще этого не сделал.
на сайте программного обеспечения, на котором я работаю, мы используем мою функцию disableF5 в сочетании с данными сеанса Codeigniter. Например, есть кнопка блокировки, которая заблокирует экран и предложит диалоговое окно пароля. Функция "disableF5" работает быстро и легко и удерживает эту кнопку от чего-либо. Однако, чтобы предотвратить щелчок мыши по кнопке обновления, происходит несколько вещей.
- при нажатии кнопки блокировки данные сеанса пользователя имеют переменную с именем "locked", которая становится TRUE
- при нажатии кнопки Обновить, на главной странице метод загрузки является проверка данных сеанса для "заблокирован", если это правда, то мы просто не разрешаем перенаправление и страница никогда не меняется, независимо от запрошенного назначения
совет: попробуйте использовать файл cookie набора серверов, например PHP
$_SESSION, или даже .NetResponse.Cookies, чтобы поддерживать " где " ваш клиент находится на вашем сайте. Это тем более ванилин способ сделать то, что я делаю с классом сеанса CI. Большая разница в том, что CI использует таблицу в вашей БД, тогда как эти ванилин методы сохранения редактируемых файлов cookie на стороне клиента. Недостатком, однако, является то, что пользователь может очистить свои куки.
С сайта Энрике добавлено:
window.history.forward(1); document.attachEvent("onkeydown", my_onkeydown_handler); function my_onkeydown_handler() { switch (event.keyCode) { case 116 : // 'F5' event.returnValue = false; event.keyCode = 0; window.status = "We have disabled F5"; break; } }
для mac cmd+r, cmd + shift+r нужно.
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); }; $(document).ready(function(){ $(document).on("keydown", disableF5); });
var ctrlKeyDown = false; $(document).ready(function(){ $(document).on("keydown", keydown); $(document).on("keyup", keyup); }); function keydown(e) { if ((e.which || e.keyCode) == 116 || ((e.which || e.keyCode) == 82 && ctrlKeyDown)) { // Pressing F5 or Ctrl+R e.preventDefault(); } else if ((e.which || e.keyCode) == 17) { // Pressing only Ctrl ctrlKeyDown = true; } }; function keyup(e){ // Key up Ctrl if ((e.which || e.keyCode) == 17) ctrlKeyDown = false; };
$(window).bind('beforeunload', function(e) { return "Unloading this page may lose data. What do you want to do..." e.preventDefault(); });
это код, который я использую, чтобы отключить обновление на IE и firefox (это хорошо работает для F5, Ctr+F5 и Ctrl+R)
<script language="javascript" type="text/javascript"> //this code handles the F5/Ctrl+F5/Ctrl+R document.onkeydown = checkKeycode function checkKeycode(e) { var keycode; if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; // Mozilla firefox if ($.browser.mozilla) { if (keycode == 116 ||(e.ctrlKey && keycode == 82)) { if (e.preventDefault) { e.preventDefault(); e.stopPropagation(); } } } // IE else if ($.browser.msie) { if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) { window.event.returnValue = false; window.event.keyCode = 0; window.status = "Refresh is disabled"; } } } </script>Если вы не хотите использовать useragent для определения типа браузера ($.браузер использует навигатор.UserAgent для определения платформы), вы можете использовать
if('MozBoxSizing' in document.documentElement.style)- возвращает true для firefox
использовать это для современных браузеров:
function my_onkeydown_handler( event ) { switch (event.keyCode) { case 116 : // 'F5' event.preventDefault(); event.keyCode = 0; window.status = "F5 disabled"; break; } } document.addEventListener("keydown", my_onkeydown_handler);
это работает для меня во всех браузерах:
document.onkeydown = function(){ switch (event.keyCode){ case 116 : //F5 button event.returnValue = false; event.keyCode = 0; return false; case 82 : //R button if (event.ctrlKey){ event.returnValue = false; event.keyCode = 0; return false; } } }
вы можете напрямую использовать горячую клавишу от богатых лиц, если вы используете JSF.
<rich:hotKey key="backspace" onkeydown="if (event.keyCode == 8) return false;" handler="return false;" disableInInput="true" /> <rich:hotKey key="f5" onkeydown="if (event.keyCode == 116) return false;" handler="return false;" disableInInput="true" /> <rich:hotKey key="ctrl+R" onkeydown="if (event.keyCode == 123) return false;" handler="return false;" disableInInput="true" /> <rich:hotKey key="ctrl+f5" onkeydown="if (event.keyCode == 154) return false;" handler="return false;" disableInInput="true" />
Если вы хотите, чтобы отключить сочетание клавиш Ctrl+клавишу F5 , сочетание клавиш Ctrl+R или F5 и нажмите клавишу Backspace ,то вы можете использовать этот простой код. Этот код работает в Mozila, а также Chrome . Добавьте этот код в тег вашего тела:
<body onkeydown="return (event.keyCode == 154)">
Comments