JavaScript를 사용하여 F5 및 브라우저 새로 고침 비활성화
JavaScript를 사용하여 브라우저 새로 고침을 비활성화하고 싶습니다.
현재 사용 중이며 window.onbeforeunload
사용자가 브라우저를 새로 고칠 때 호출되지 않도록하고 싶습니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
업데이트 최근 댓글은 이것이 새로운 Chrome에서 작동하지 않는다고 주장합니다 ... jsFiddle에 표시되고 내 개인 사이트에서 테스트 되었 듯이이 방법은 여전히 Chrome 버전에서 작동합니다.26.0.1410.64 m
그건 그렇고 jQuery에서 정말 쉽습니다.
jsFiddle
// 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 버튼 만 비활성화됩니다. 새로 고침을 비활성화하려면 서버 측 스크립트를 사용하여 페이지 상태 변경을 확인해야합니다. 아직 해보지 않았기 때문에 어떻게해야할지 정말 안다고 말할 수 없습니다.
내가 일하는 소프트웨어 사이트에서 우리는 Codeigniter의 세션 데이터와 함께 disableF5 기능을 사용합니다. 예를 들어 화면을 잠그고 암호 대화 상자를 표시하는 잠금 버튼이 있습니다. "disableF5"기능은 빠르고 쉬우 며 버튼이 어떤 작업도하지 못하게합니다. 그러나 새로 고침 버튼에서 마우스 클릭을 방지하기 위해 몇 가지 작업이 수행됩니다.
- 잠금을 클릭하면 사용자 세션 데이터에 TRUE가되는 "잠김"이라는 변수가 있습니다.
- 새로 고침 버튼을 클릭하면 마스터 페이지로드 방법에서 "잠김"에 대한 세션 데이터를 확인합니다. 참이면 리디렉션을 허용하지 않으며 요청 된 대상에 관계없이 페이지가 변경되지 않습니다.
팁 : PHP$_SESSION
또는 .Net과 같은 서버 설정 쿠키를 사용Response.Cookies
하여 클라이언트가 사이트에서 "위치"를 유지하도록하십시오. 이것은내가 CI의 세션 클래스로하는 일을하는 더 바닐라 방법입니다. 큰 차이점은 CI는 DB의 테이블을 사용하는 반면 이러한 바닐라 방법은 클라이언트에 편집 가능한 쿠키를 저장한다는 것입니다. 하지만 단점은 사용자가 쿠키를 지울 수 있다는 것입니다.
Enrique가 게시 한 사이트에서 :
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를 사용하여 브라우저 유형을 감지하지 않으려면 ($ .browser는 navigator.userAgent를 사용하여 플랫폼을 결정) 다음을 사용할 수 있습니다.
if('MozBoxSizing' in document.documentElement.style)
-firefox에 대해 true를 반환합니다.
Use this for modern browsers:
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);
You can directly use hotkey from rich faces if you are using 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" />
It works for me in all the browsers:
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;
}
}
}
If you want to disable ctrl+f5 , ctrl+R , f5 ,backspace then you can use this simple code. This code is working in Mozila as well as Chrome . Add this code inside your body tag:
<body onkeydown="return (event.keyCode == 154)">
ReferenceURL : https://stackoverflow.com/questions/2482059/disable-f5-and-browser-refresh-using-javascript
'Development Tip' 카테고리의 다른 글
Document 개체에서 Window 개체를 가져 오는 방법은 무엇입니까? (0) | 2020.12.29 |
---|---|
DROP… CREATE 대 ALTER (0) | 2020.12.29 |
압축 및 암호화 할 때 먼저 압축해야합니까, 아니면 먼저 암호화해야합니까? (0) | 2020.12.29 |
Mockito로 new () 호출이있는 테스트 클래스 (0) | 2020.12.29 |
기본 클래스의 메서드 호출 (0) | 2020.12.29 |