페이지 닫기 이벤트 가져오기

6612 단어 이벤트
머리에 넣고.

<script type="text/javascript"> 
  window.onbeforeunload = onbeforeunload_handler;
  window.onunload = onunload_handler;
  function onbeforeunload_handler(){
    var warning=" ?";
     return warning;
  }
 
function onunload_handler(){
  var warning=" ";
  alert(warning);
}
</script>

js 창 닫기 이벤트 및 사용법
다음으로 전송:http://www.cnblogs.com/panjun-donet/archive/2009/04/03/1428830.html
Onunload 및 Onbeforeunload
Onunload, onbeforeunload는 새로 고치거나 닫을 때 호출됩니다. Onbeforeunload도 페이지가 리셋되거나 닫힐 때 호출됩니다. Onbeforeunload는 서버에 가서 새로운 페이지를 읽으려고 할 때 호출됩니다. 아직 읽기 시작하지 않았습니다.onunload는 서버에서 불러올 새 페이지를 읽었습니다. 현재 페이지를 바꿀 때 호출됩니다.Onunload는 페이지의 업데이트와 닫기를 막을 수 없습니다.Onbeforeunload는 할 수 있다.사용자가 도중에 시험에서 퇴출되는 것을 방지하기 위해 시험 시스템을 만들었는데 코드는 다음과 같다.

  window.onbeforeunload = onbeforeunload_handler;
  window.onunload = onunload_handler;
  function onbeforeunload_handler(){
var warning = "종료 확인?";
     return warning;
  }
function onunload_handler(){
var warning="와주셔서 감사합니다".
  alert(warning);
}

동시에 인터넷에서 관련 글을 찾아 공유했다.
B/S 구조의 응용 시스템은 일부 동적 스크립트 언어를 사용하여 데이터베이스 등 일련의 서버 자원에 접근해야 할 뿐만 아니라 클라이언트 스크립트를 적절하게 사용하여 페이지의 인터페이스 동적 디스플레이, 서버를 제출하기 전의 사전 처리, 사용자의 조작 행에 따라 합리적인 이벤트 처리 등도 해야 한다.
가장 유행하는 언어는 자바, Basic, C, C++ 같은 고급 언어라고 생각할 수도 있지만, 실질적으로 자바 스크립트도 부끄럽지 않은 유행어이다.그것의 오묘함은 네가 상상한 것보다 훨씬 많다.Google의 GMail과 Map을 보았다면, Javascript도 세계를 손에 닿을 수 있게 하고 기술을 난로에 태우는 지경에 이르게 할 수 있다는 것을 알아야 한다.
본고는 실제에서 자주 만나는 몇 가지 문제에서 착안하여 자바스크립트 스크립트로 이 문제들을 교묘하게 해결하는 데 착수하여 벽돌을 던져 옥을 끌어들여 모두에게 도움을 주기를 바란다.
창을 강제로 닫은 후 사용자 세션 지우기
일반적인 회원식 사이트는 회원이 로그인에 성공한 후에 회화나 쿠키를 만들어 사이트 간에 회원의 데이터를 직접 공유할 수 있다.이러한 데이터는 일반적으로 서버 메모리에 저장됩니다.회원이 탈퇴할 때 정상적인 디자인 사고방식은 탈퇴 기능을 실행하여 회원이 로그인에 성공한 후에 사용하는 서버와 클라이언트 등 관련 자원을 방출하는 것이다.현재 자주 발생하는 문제는 사용자가 우리가 원하는 종료 프로그램이 아니라 웹 페이지를 직접 닫는 것이다.이렇게 하면 사용자가 로그인한 후의 자원이 제때에 방출되지 않고 서버의 부하를 가중시키고 문제가 더욱 누적되고 점차적으로 확대됨에 따라 서버의 성능에 영향을 줄 수 있다.
다행히도 인터넷에서 IE 브라우저에 대한 사용자 포획 Alt + F4, 제목 표시줄 오른쪽 키로 닫기, 제목 표시줄 두 번 클릭, 닫기 단추를 직접 누르는 이벤트를 찾을 수 있습니다.물론 프로세스를 직접 닫거나 최소화하는 방식으로 작업 표시줄에서 닫는 것은 정상적으로 포착할 수 없지만 현재 관련된 해결 방안은 대부분의 문제점을 해결할 수 있다.

function window.onUnload()
{
var newWindow;
if((window.screenLeft>=10000 && window.screenTop>=10000)||event.altKey)
{
newWindow=window.open ('종료 프로그램 주소','웹 이름',
'width=0,height=0,top=4000,left=4000');//뷰포트 외부에 새 창이 열립니다.
newWindow.opener=null;
sleep(5000);//새 창 열기 실행 코드를 처리할 수 있도록 휴면 작업 수행
newWindow.close();//새 창 닫기
...//기타 실행해야 할 종료 프로그램 시퀀스는 위에서 추가한 것을 참고할 수 있습니다
}
}
function sleep(milisecond)
{
var currentDate,beginDate=new Date();
var beginHour,beginMinute,beginSecond,beginMs;
var hourGaps,minuteGaps,secondGaps,msGaps,gaps;
beginHour=beginDate.getHours();
beginMinute=beginDate.getMinutes();
beginSecond=beginDate.getSeconds();
beginMs=beginDate.getMilliseconds();
do
{
currentDate=new Date();
hourGaps=currentDate.getHours() - beginHour;
minuteGaps=currentDate.getMinutes() - beginMinute;
secondGaps=currentDate.getSeconds() - beginSecond;
msGaps=currentDate.getMilliseconds() - beginMs;
if(hourGaps<0) hourGaps+=24;//진시 진분 진초의 특수한 상황을 고려하다
gaps=hourGaps*3600+ minuteGaps*60+ secondGaps;
gaps=gaps*1000+msGaps;
}while(gaps}

설명:
window.screenLeft = 10000 + 테두리 너비(2×2) = 10004
window.screenTop = 10000 + 도구 모음 높이 + 제목 표시줄 높이 = 10097
설명할 필요가 있습니다. onBeforeUnload에서 화면의 좌표 속성은 모두 정상 수치입니다.
screenLeft: 브라우저 클라이언트 영역의 왼쪽 상단에 있는 x 좌표를 가져옵니다.
screenTop: 브라우저 클라이언트 구역의 왼쪽 상단에 있는 y 좌표를 가져옵니다.
윈도우를 사용하려면location은 URL을 지정하여 처리합니다. 그러면 onBeforeUnload 이벤트가 아닌 onBeforeUnload 이벤트에 두어야 합니다.onUnload에서 윈도우를 사용하지 마십시오.close, 대상이 삭제되기 전에 이 이벤트를 즉시 터치하기 때문에, 삭제된 대상에 의한 인용을 효과적으로 실행할 수 없습니다.onBeforeUnload는 페이지가 마운트 해제되기 전에 발생하는 이벤트입니다.해결 방법은 새로 창을 열고 닫는 것이다.이른바 제거란 실질적으로 종료 기능을 한 페이지를 새 창을 열 수 있는 방식으로 호출하는 것이다.닫을 때까지 호출할 때 가능한 한 한동안 머물러서 모든 코드가 유효하게 터치될 수 있도록 해야 한다.설명이 필요한 것은 onUnload 이벤트입니다. 페이지가 전진, 후퇴, 리셋, 방향, 닫힌 후에 촉발됩니다.따라서 창을 강제로 닫는 특수한 사건을 포착하려면 코드에 판단 조건을 덧붙여 상황에 부합되는 조건에서 촉발할 수 있도록 해야 한다.이 단락 코드는 이미 성공적으로 테스트를 진행했다.
대화 상자 값 가져오기
웹 페이지에서 유사한 대화상자 디자인을 자주 사용합니다. 사용자의 입력을 편리하게 하고 빠른 선택을 위해 항상 한 페이지를 열고 선택한 후에 이 페이지를 닫고 사용자가 선택한 데이터를 부모 페이지로 전달하여 후속 처리를 합니다.
얼마 전, 비교적 원시적인 방법을 보았는데, 그다지 통용되지 않고, 직접 하위 페이지에서 부모 페이지의 어떤 컨트롤러의 수치를 수정하고, 게다가 닫았다.이렇게 하는 단점은 대규모 호출에 적합하지 않다는 것이다.부모 페이지에 시작 날짜와 종료 날짜 두 개의 상자가 달력 페이지의 입력을 받아야 한다고 가정하면, 두 개의 다른 달력 페이지를 만들어야 두 개의 상자가 대응하는 데이터를 확보할 수 있다.이것은 대형 공사에서 좋지 않은 설계 방법이다.다양한 외부 환경이 통용되는 방법을 고려하지 않으면 유지보수의 난이도를 높이고 개발의 효율을 떨어뜨릴 수 있다.
IE는 대화상자 페이지에 설정된 윈도우를 통해 모드 창을 지원합니다.returnValue의 수치는 부모 창에서 윈도우를 호출합니다.showModalDialog에서 반환 값을 가져오면 null (열린 페이지가 존재하지 않음) 이나 undefined (window.returnValue 설정이 없음) 를 반환할 수 없습니다.하위 창의 반환 값을 가져오기 위해 getDialog 함수를 설계했습니다. 이상하거나 잘못되면 빈 문자열로 되돌려줍니다. 그렇지 않으면 정상적인 반환 데이터가 됩니다.
원래의 윈도우.오픈 방식, 저도 get Windows Return Value를 개선하여 서브 창의 윈도우를 탐색했습니다.returnValue, 데이터가 있으면 종료됩니다.창이 여전히 열려 있으면 자동으로 닫힙니다.같은 두 함수는 모두 윈도우를 정확하게 설정해야 한다.returnValue.
//IE에서 모드 대화 상자를 열고 데이터를 반환합니다.
//페이지를 열어 윈도우를 설정해야 합니다.returnValue, 오류 또는 잘못된 반환
function getDialog(url)
{
var returnValue;
try
{
returnValue=window.showModalDialog(url);
}catch(e)
{ return ""; }
return (returnValue==null||returnValue=="undefined")?"":returnValue;
}
//윈도우를 사용합니다.오픈은 하위 창 데이터를 가져오기 위해 윈도우를 동적으로 설정해야 합니다.returnValue
//매개변수는 주소, 이름, 너비, 높이이며 너비와 높이를 설정하지 않습니다. 0으로 설정하십시오.
function getWindowReturnValue(url,name,width,height)
{
var opener=null;
var spec="toolbar=0,menubar=0,scrollbars=0,resizeable=0";
var returnValue=null;
if(width>0) spec=spec+",width="+String.valueOf(width);
if(height>0)
{
spec=spec+",height="+String.valueOf(height);
}
opener=window.open(url,name,spec);
while(!opener.window.closed)
{
returnValue=opener.window.returnValue;
if(returnValue!=null&&returnValue.length>0) break;
}
if(!opener.window.closed) opener.window.close();
return returnValue;
}

좋은 웹페이지 즐겨찾기