2013-09-04 1 views
4

스택에 좋은 답변을 찾을 수 없습니다 - 대화 상자, 텍스트 편집기 및 VBScript를 사용하는 사람과 관련이 있습니다.IE에서 윈도우 오프너를 어떻게 찾습니까?

나는 창문 따개에 메시지를 게시해야합니다. FF, Chrome, Opera에서는 정상적으로 작동하지만 IE8-10에서는 window.opener이 null입니다.

새 창을 표시하려면 window.open을 사용하고 있습니다.

난이 시도 :

열린 창은 단순히 이런 스크립트 태그가
var new_window = window.open(url, '_social', "height=600,width=600"); 

if (!new_window.opener) { 
    new_window.opener = window; 
} 

: 나는 콘솔을 열고 널 (null)을 제공 window.opener을 기록, 그래서 '돈

<script type="text/javascript"> 
var data = { 
    type : 'redirect', 
    destination : '<?= $destination; ?>' 
}; 
window.opener.postMessage(JSON.stringify(data), '*'); 
window.close(); 
</script> 

DOM이 준비가되었는지 아닌지와 관련이 있다고 생각하지 않습니다.

스크립트 태그가있는 페이지에 착륙하기 전에 창이 몇 번 리디렉션됩니다.

답변

1

사실, 문제는 window.opener와 아무 없을 수 있습니다 - IE8 +는 iframe을 함께 communciate하는 PostMessage를 사용할 수 있기 때문에입니다.

http://blogs.msdn.com/b/ieinternals/archive/2009/09/16/bugs-in-ie8-support-for-html5-postmessage-sessionstorage-and-localstorage.aspx

+0

"유감스럽게도이 원본 해결 방안은 팝업 창과 window.opener 페이지가 서로의 스크립트 함수를 호출하기 위해 동일한 출처에서 나와야한다고 같은 출처 정책에 명시되어 있기 때문에이 해결 방법은 종종 불가능합니다." 그래서 저는 다른 도메인에서 창을 여는 중이기 때문에 오프너가 존재하지 않는 것으로 보입니다. –

+0

글쎄, 그래, 그들의 postMessage 구현은 그냥 같은 출신 윈도우 액세스 주변 해킹했다면 - 그것은 그 것처럼 보입니다. 같은 하위 도메인의 창에 액세스하려는 경우 최소한 document.domain 속임수를 사용하여 액세스 권한을 얻을 수 있습니다. –

+0

사실 내 도메인에 iframe이있어 다른 도메인으로 창을 엽니 다.하지만 논리는 유지됩니다. 내 도메인에'window.open '을 사용하면'opener'가 있습니다. 이 광기가 왜 일어나는지 오래 이야기. –

0

IE8은 공백이 없습니다. 그것이 작동하는 순서로 제거

var new_window = window.open(url,'_social',"height=600,width=600"); 

if (!new_window.opener) { 
    new_window.opener = window; 
} 
+0

IE9 또는 10에서도 작동하지 않습니다. 또한 나는 인자 사이의 공백에 대해서는 아무런 문제가 없었습니다. –

관련 문제