
많은 페이지에는 사용자가 떠날 때 경고가 표시됩니다. 탭을 닫거나 저장하지 않고 다른 곳으로 이동하는 경우 경고를 확인할 때까지 사이트에서 경고/떠남을 차단하는 데에는 여러 가지 이유가 있습니다. 예: "정말로 하시겠습니까?" 이 페이지에서 나가시겠습니까?"
이는 일반적으로 onbeforeunload
및/또는 onunload
핸들러를 사용하여 수행됩니다.
여기예입니다.
해당 핸들러에서 생성된 경고/사용자 차단 이벤트를 방지할 수 있는 방법이 있습니까? 기본적으로 JS를 활성화한 상태로 두고 싶고, 특히 추가 클릭 없이 페이지를 떠나는 것을 방지하는 기능을 허용하지 않습니다.
onbeforeunload
핸들러 는 onunload
여전히 실행되어야 합니다. 사용자를 차단하는 일을 하도록 허용되어서는 안 됩니다. 이는 경고가 발생하지 않으며 몇 초 이상 걸리는 작업이 없음을 의미합니다.
나는 특정 페이지에 대한 JavaScript를 편집/Greasemonkey 패치하는 몇 가지 플러그인을 발견했고, 그 코드를 조금 더 보편적으로 적용할 수 있도록 시도했습니다. 그러나 나는 작동하는 솔루션을 찾고 싶습니다.어느사용자 종료를 차단하려는 페이지입니다.
답변1
가장 간단한 방법은 페이지 스크립트를 직접 재정의하고 이벤트를 null
.
window.onbeforeunload = null;
이것은 정말로 악의적이지 않은 이상 어디에서나 작동하며 스스로 계속 재할당해야 합니다. 이러한 경우 설정을 유지하는 루프가 null
작동할 것입니다.
while(true) {
if (window.onbeforeunload != null) {
window.onbeforeunload = null;
}
}
이제 일부 페이지에서는 이를 좋은 목적으로 사용하므로 주의하세요. YouTube 업로드 페이지를 살펴보세요. 업로드 중에 다른 페이지로 이동하면 진행 시간이 몇 시간 단축될 수 있습니다. 또는 작성 중인 웹 양식일 수도 있지만 다시 작성하고 싶지 않을 수도 있고, 다시 입력하고 싶지 않을 메시지(포럼/이메일)일 수도 있습니다. 이 기능을 사용하면 보호됩니다.
또 다른 문제는 AJAX로 데이터를 저장하는 등의 보조 목적으로 이를 사용하는 페이지입니다. 그들은 이 이벤트를 사용하여 저장 작업을 트리거할 수 있으며, 사용자가 요청을 완료하기 위해 버튼을 클릭하는 데 충분한 시간이 걸리기를 바랍니다. 다시 말하지만, 이것은 종종 당신을 자신으로부터 구하기 위해 수행됩니다.
그러나 분명히 우리 모두는 많은 페이지에서 이것을 나쁜 목적으로 사용한다는 것을 알고 있습니다. 따라서 작업하려는 페이지를 알고 있다면 언제든지 화이트리스트 시스템을 사용할 수 있습니다. 완전히 차단하지 않고 이 작업을 차단할 수 있는 방법은 없으며 window.onbeforeunload
, 이 작업이 취할 수 있는 (아마도 좋은) 작업도 있습니다.
팝업 상자를 중지하는 동안 올바른 작업을 유지할 수 있는 방법은 없습니다(특정 페이지 코드에 대한 사전 지식 없이). 이 상자는~ 아니다. alert()
상자는 의 의도된 동작에 따라 브라우저에 의해 생성됩니다 onbeforeunload
. window.onbeforeunload
문자열을 반환하기 위해 할당한 함수를 만들어 이를 만듭니다 . 해당 문자열은 팝업에 인쇄됩니다.
window.onbeforeunload = function() {
//Whatever
return "WARNING! You have unsaved changes that may be lost!";
}
따라서 해당 기능을 삭제하지 않으면 팝업을 차단할 수 없습니다.
게다가 방법을 찾았다면 어떤 AJAX도 실패할 것입니다. 팝업은 요청을 처리할 시간을 제공하며, 팝업이 없으면 데이터가 손실될 수 있습니다.
에 관해서는 onunload
이것으로 당신을 차단하는 것이 불가능해야 합니다. 불이 붙으니까~ 후에페이지가 언로드됩니다. 하지만 안전을 위해 항상 다음을 수행할 수 window.onunload = null;
있으며 주의를 기울여야 합니다.
답변2
// ==/UserScript==
var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);
답변3
Windows 시스템의 성가신 팝업을 처리할 수 있는 멋진 도구가 있습니다.클릭오프. 다음에서 다운로드할 수 있습니다.여기. 확인해보니 SharePoint 사이트에 대한 "변경 사항이 저장되지 않을 수 있습니다." 경고와 함께 작동합니다.