jQuery/Javascript를 사용하여 페이지 새로 고침을 금지합니다.
사용자가 내 페이지에 나타나면 페이지를 새로 고치지 않도록 합니다.
사용자는 언제든지 상단에 있는 새로 고침 버튼을 누릅니다.그는 다음과 같은 경고를 받아야 합니다.
페이지를 새로 고칠 수 없습니다.
또한 사용자가 새 탭을 열고 이전 탭에서 동일한 URL에 액세스하려고 하면 경고를 받아야 합니다.
두 탭에서 동일한 페이지를 열 수 없습니다.
자바스크립트나 jQuery를 사용해서 할 수 있습니까?1점은 정말 중요합니다.
#1은 다음을 통해 구현할 수 있습니다.window.onbeforeunload
.
예:
<script type="text/javascript">
window.onbeforeunload = function() {
return "Dude, are you sure you want to leave? Think of the kittens!";
}
</script>
사용자에게 메시지가 표시되고 페이지에 머무르거나 계속 진행할 수 있는 선택사항이 제공됩니다.이것은 점점 더 흔해지고 있습니다.스택 오버플로는 게시물을 입력하는 동안 페이지를 벗어나 탐색하려는 경우에 수행됩니다.사용자가 다시 로드하는 것을 완전히 막을 수는 없지만, 다시 로드하는 경우에는 정말 무섭게 들릴 수 있습니다.
#2는 다소 불가능합니다.세션 및 사용자 로그인을 추적한 경우에도 두 번째 탭이 올바르게 검색되었는지 확인할 수 없습니다.예를 들어, 창 하나를 연 다음 닫을 수 있습니다.이제 나는 새로운 창문을 엽니다.첫 번째 탭을 이미 닫았더라도 두 번째 탭으로 인식할 수 있습니다.이제 사용자는 첫 번째 창을 닫았기 때문에 액세스할 수 없고, 사용자가 거부하고 있기 때문에 두 번째 창에 액세스할 수 없습니다.
사실, 우리 은행의 온라인 시스템은 #2를 하기 위해 정말 열심히 노력하고, 위에서 설명한 상황은 항상 발생합니다.저는 보통 서버 측 세션이 만료될 때까지 기다려야 은행 시스템을 다시 사용할 수 있습니다.
사용자가 새로 고치는 것을 막을 수도 없고, 실제로 시도해서도 안 됩니다.당신은 왜 이 해결책이 필요한지 되돌아봐야 합니다, 여기서 근본적인 문제가 무엇입니까?거기서부터 시작해서 문제를 해결하기 위한 다른 방법을 찾으세요.아마도 당신은 이것이 그러한 해결책을 찾는 데 도움이 될 것이라고 생각하는 이유를 자세히 설명한 것 같습니다.
기본적인 브라우저 기능을 중단하는 것은 결코 좋은 생각이 아닙니다. 99.999999% 이상의 인터넷이 작동하고 F5로 업데이트됩니다. 이것은 사용자의 기대 사항이며, 깨서는 안 됩니다.
F5 키를 비활성화하는 것은 좋은 생각은 아니지만 아래와 같이 JQuery에서 할 수 있습니다.
<script type="text/javascript">
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };
$(document).ready(function(){
$(document).on("keydown", disableF5);
});
</script>
이것이 도움이 되기를 바랍니다!
CGI의 초창기에는 다양한 백엔드 작업을 트리거하는 많은 양식이 있었습니다.그룹에 대한 텍스트 알림, 인쇄 작업, 데이터 파밍 등.
사용자가 "기다려 주십시오..."라고 말하는 페이지에 있는 경우시간이 좀 걸릴 수 있는 거대한 작업을 수행하는 중입니다."그들은 REFRESH를 칠 가능성이 더 높았고 이것은 좋지 않을 것입니다!
왜죠? 더 느린 작업을 유발하고 결국 전체를 교착 상태에 빠뜨릴 수 있기 때문입니다.
해결책?그들이 그들의 형태를 하도록 허락합니다.그들이 서류를 제출할 때...작업을 시작한 다음 기다리라는 메시지가 표시된 다른 페이지로 이동합니다.
가운데 페이지에 작업을 시작하는 데 필요한 양식 데이터가 실제로 들어 있는 위치입니다.그러나 WAIT 페이지에는 Javascript history destroy가 포함되어 있습니다.따라서 WAIT 페이지에는 WAIT 자체에 필요한 양식 데이터만 포함되어 있으므로 WAIT 페이지를 원하는 대로 다시 로드하면 원래 작업이 백그라운드에서 시작되지 않습니다.
그게 말이 되기를 바랍니다.
이력 파기 기능은 또한 뒤로를 클릭한 다음 새로 고침하는 것을 방지합니다.
그것은 매우 매끄럽고 비영리 단체가 해체되기 전까지 여러 해 동안 잘 작동했습니다.
예: FORM ENTRY - 모든 정보를 수집하고 제출하면 백엔드 작업이 트리거됩니다.
양식 항목에서 응답 - 정적 대기 페이지로 리디렉션하거나 다른 양식(대기 페이지)으로 POST/GET을 수행하는 HTML을 반환합니다.
WAIT PAGE - 최신 내역을 파기하기 위한 Javascript와 WAIT 페이지와 관련된 FOM 데이터만 포함합니다.(-1 OR -2)를 사용하여 가장 최근 페이지만 삭제하고 원래 FOM 항목 페이지로 돌아갈 수 있습니다.
WAIT 페이지가 나타나면 원하는 만큼 REFRESH를 클릭할 수 있으며, 그러면 원래 FOM 작업이 백엔드에 생성되지 않습니다.대신 WAIT 페이지는 항상 작업 상태를 확인할 수 있도록 META 시간 새로 고침 자체를 수용해야 합니다.작업이 완료되면 대기 페이지에서 원하는 곳으로 리디렉션됩니다.
수동으로 새로 고침을 수행하는 경우...그들은 단지 그 안에 그들의 직업 상태를 한 번 더 확인할 뿐입니다.
도움이 되길 바랍니다.행운을 빌어요.
아니요, 없어요.
JS에서 새로 고침 버튼을 클릭하는 것을 가로챌 방법이 없으며, 설령 있었다 하더라도 JS는 끌 수 있습니다.
X에서 한 발 물러서서(새로 고침 방지) Y에 대한 다른 해결책을 찾아야 합니다(어떤 방법이든).
문제 #2는 이제 브로드캐스트를 사용하여 해결할 수 있습니다.API.
현재 크롬, 파이어폭스 및 오페라에서만 사용할 수 있습니다.
var bc = new BroadcastChannel('test_channel');
bc.onmessage = function (ev) {
if(ev.data && ev.data.url===window.location.href){
alert('You cannot open the same page in 2 tabs');
}
}
bc.postMessage(window.location.href);
숫자 (2)는 사용자가 참여하는 각 세션에 대한 사용자 정의 하트비트가 있는 소켓 구현(웹 소켓, socket.io 등)을 사용하여 가능합니다.사용자가 다른 창을 열려고 할 경우, 서버에 javascript 처리기를 확인한 후 오류 메시지로 응답합니다.
그러나 구글 문서에서처럼 가능하면 두 세션을 동기화하는 것이 더 나은 해결책입니다.
권장되지는 않지만 사용자가 페이지를 가능한 한 새로 고침하지 못하도록 하려면 다음을 사용할 수 있습니다.
setInterval(function(){
window.location.reload();
window.stop();
},100)
새로 고침을 방지할 뿐만 아니라 탐색도 방지할 수 있습니다.
언급URL : https://stackoverflow.com/questions/3527041/prevent-any-form-of-page-refresh-using-jquery-javascript
'it-source' 카테고리의 다른 글
상위 폴더가 없는 경우 파일을 쓰는 방법은 무엇입니까? (0) | 2023.08.29 |
---|---|
닫힌 후에도 Bootstrap Modals가 본문에 패딩 권한을 계속 추가합니다. (0) | 2023.08.29 |
Plesk Server Maria와 MySql 연결 플러터DB (0) | 2023.08.29 |
안드로이드에서 자바스크립트를 디버그하려면 어떻게 해야 합니까? (0) | 2023.08.29 |
마지막 요소를 보기로 스크롤할 수 없는 Excel 목록 상자를 수정하는 방법 (0) | 2023.08.29 |