window. open 사용 중 문제

12699 단어 window.open
전단 개발 에 서 는 windows. open 에서 새로운 창 을 꺼 내 상호작용 을 해 야 하지만 사용 하 는 과정 에서 여러 가지 문제 에 부 딪 힐 수 있 습 니 다. 다음은 제 가 평소에 개발 하 는 과정 에서 겪 은 문제 입 니 다.
winodw. open 사용 에 대해 서 는 이 글 을 먼저 볼 수 있 습 니 다.  http://www.w3help.org/zh-cn/causes/BX1053
브 라 우 저 차단
각종 팝 업 광고의 남용 으로 현재 각 브 라 우 저 는 window. open 의 사용 을 엄 격 히 제한 하고 있 으 며, 각종 팝 업 창 차단기 도 있어 자칫 window. open 방법 이 차단 되 는 경우 도 있다.
다음 스 크 립 트 가 자동 으로 실행 되 는 팝 업 창 행 위 는 브 라 우 저 에 의 해 차단 된다.
<script type="text/javascript">
//
window.open(url);
</script>

그러면 우 리 는 어떻게 창 을 정확하게 팝 업 해 야 합 니까? 팝 업 창의 함 수 를 마우스 의 onclick 이벤트 에 연결 하면 브 라 우 저 는 이것 이 합 리 적 인 open 이 라 고 생각 하고 차단 하지 않 습 니 다.
<script type="text/javascript">
openNewWindow
=function() {
window.open(url);
}
</script>

<button onclick="openNewWindow()"> </button>

 
또는 팝 업 창 함 수 를 document. body 에 연결 할 수 있 습 니 다. 사용자 가 페이지 에서 클릭 하면 창 이 팝 업 됩 니 다.
이렇게 하면 정상 적 인 새 창 팝 업 을 보장 할 수 있 지만 클릭 이벤트 에서 AJAX 요청 을 먼저 보 내 려 면 요청 결과 에 따라 창 을 팝 업 하 는 행 위 는 일부 브 라 우 저 에서 도 차단 된다. 예 를 들 어 Chrome, FF 등 이다.
<script type="text/javascript">
openNewWindow
=function() {
$.ajax({
// ajax
url:ajax url,
success:
function() {
// ,
window.open(url);
}
});
}
</script>

해결 방향 은 다음 과 같은 두 가지 가 있다.
1. openNewWindow 에서 먼저 빈 창 을 팝 업 하고 AJAX 가 팝 업 window 의 url 을 수정 하 라 고 요청 합 니 다.
2. ajax 를 사용 하지 않 고 요청 할 URL 을 오픈 한 URL 로 서버 에서 판단 합 니 다.
이 두 가지 방법 모두 창 에 긴 시간 동안 흰색 페이지 가 나타 날 수 있 으 며, 마지막 요청 결과 가 팝 업 창 이 필요 없 을 때 이 창 을 닫 아야 한다 면 흰색 페이지 가 반 짝 거 려 사용자 체험 이 좋 지 않다.그래서 ajax 에서 되 돌아 오 라 고 요청 하 는 팝 업 창 은 되도록 피해 야 합 니 다.
질문
다음 예 를 들 어 팝 업 된 창 페이지 는 부모 페이지 의 callBackFun 방법 을 사용 한 다음 자신 을 닫 습 니 다.
newWindow.html
<script type="text/javascript">
onload
=function(){
window.opener.callBackFun({
'msg' : 'hahhaha'});
self.close(); //
}
</script>

홈 페이지:
<script type="text/javascript">
$showlog
=function( msg ){
var el = document.getElementById( 'log' );
el.innerHTML
= el.innerHTML +'<br/>'+ msg;
}
openNewWindow
=function() {
window.open(
"./newWindow.html");
}
callBackFun
=function( obj ){
//
$showlog(obj.msg);
//
setTimeout(function(){
// obj.msg,IE6
$showlog(obj.msg);
},
1000);
}
</script>

<button onclick="openNewWindow()"> </button>
<div id="log"></div>

받 은 인자 가 인용 형식 일 때 팝 업 창 이 닫 히 면 IE6 아래 홈 페이지 에서 받 은 데이터 도 회수 합 니 다.이 때 obj 가 존재 한다 고 판단 하지만 obj. msg 에 접근 하려 고 시도 할 때 오류 가 발생 하여 힌트 가 없습니다.따라서 이런 사용 장면 이 있 으 면 먼저 obj 를 깊이 있 게 복사 해 야 한다.
 
질문
IE6 에서 window. open 에서 열 린 페이지 가 cache 와 gzip 압축 을 동시에 진행 하면 페이지 가 우발 적 으로 흰색 페이지 가 해석 되 지 않 는 상황 이 발생 할 수 있 습 니 다.이 때 사실 페이지 는 정상적으로 가 져 왔 습 니 다. 단지 gzip 압축 을 풀 지 않 아서 생 긴 것 입 니 다.해결 방법 은 출력 헤드 정보 (cache 와 gzip) 를 조정 하 는 것 이다.
header('Cache-Control: post-check=0, pre-check=0');
header('Pragma: ');

이것 은 IE6 의 BUG 입 니 다. window. open 에 만 나타 난 것 이 아니 라 제 가 이런 상황 에서 만 났 을 뿐 입 니 다.아래 의 문장 을 참고 할 수 있다
http://blog.sina.com.cn/s/blog_4dd475390100qci5.html
4. 팝 업 창 이 닫 혔 다 고 판단 하 는 방법
window. open 은 팝 업 창의 핸들 을 되 돌려 줍 니 다. 이 핸들 은 closed 속성 이 있 습 니 다. 창 이 닫 혔 을 때 값 이 true 이 고 그렇지 않 으 면 false 입 니 다.그러나 IE 아래 에 BUG 가 있 습 니 다. 창 이 닫 힌 후 closed 속성 은 즉시 true 로 설정 되 지 않 았 습 니 다.그래서 closed 속성 을 계속 감지 해 야 창 이 닫 혔 는 지 확인 할 수 있 습 니 다.false 일 때 도 닫 혔 을 수도 있 지만아래 페이지 는 IE 의 잘못된 표현 입 니 다.
http://support.microsoft.com/kb/241109
 
5. IE7 에서 모든 페이지 가 새 탭 에서 열 려 있 는 반환 값 문 제 를 설정 합 니 다.
대부분의 경우 팝 업 창 이 성 공 했 는 지 아래 코드 를 통 해 판단 합 니 다. 성공 하면 팝 업 창의 인용 을 되 돌려 줍 니 다. 실 패 는 null 로 돌아 갑 니 다.
var _win=window.open(url);
if(!_win){
// , url
}else{
//
}

그러나 IE7 에서 모든 페이지 가 새 탭 에서 열 리 면 window. open 은 실행 에 성공 하 더 라 도 새 창 참조 로 돌아 가지 않 습 니 다.무슨 영향 이 있 는 지 알 잖 아.
 
 
 
 

좋은 웹페이지 즐겨찾기