2017-05-23 11 views
1

javascript (다른 출처로)가있는 새 창에서 URL을 열 때 창을 닫을 수있는 방법이 있습니까?요청을 보낸 후에 자바 스크립트로 창을 닫음

다음 작품 잘 :

var callWindow = $window.open("http://myexternalsite/?stuff=blah", "_blank"); 
callWindow.close(); 

하지만 http://myexternalsite/?stuff=blah에 대한 요청이 전송되기 전에 분명히이 창을 닫습니다. 나는 응답을 되 찾는 것에 대해 신경 쓰지 않고 오직 요청이 완료되도록 보장한다.

그걸 열어 놓은 스크립트가 아니기 때문에 window.close() 이벤트를 응답 페이지에 추가 할 수 없습니다 ... 그래서 내가 떠난 모든 것은 수동 시간 초과이며 시간 내에 완료되기를 바랍니다.

사이트가 https에서 실행되고 호출이 SSL 인증서가없는 (내부 네트워크) 서버이기 때문에 간단한 http 요청으로이 작업을 수행 할 수 없습니다.

+0

왜 AJAX가 주어진 URL에 요청을 보내지 않게 만드는지 모든 결과 상태를 처리 할 수 ​​있으며 더 나은 접근 방법입니다. –

+0

왜 URL에 대한 AJAX 요청으로 전환하지 않습니까? Btw는 새로운 윈도우에'onload' 이벤트를 추가하려고 했습니까? 'callWindow.onload = function() {callWindow.close(); };' – quirimmo

+0

브라우저가 혼합 된 콘텐츠 유형에 대해 불만을 토로하기 때문에 AJAX 요청을 할 수 없습니다 (사이트는 https에 있고 로컬 페이지 링크는 http 전용입니다) – ptr

답변

1

열려있는 페이지에서 페이지를로드해야하는 페이지를 만들어야합니다. 이를 수행하는 가장 좋은 방법은 postMessage을 사용하는 것입니다.

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

첫째, 페이지가 메시지를 듣기 시작해야 :

window.addEventListener("message", messagelistener); 

둘째, 새 창에로드하고있는 페이지 (페이지의 오프너에 메시지를 게시 할 수있다) :

window.opener.postMessage(message, targetOrigin); 

targetOrigin는 페이지의 호스트와 일치해야하는 문자열 (프로토콜 + 호스트 + 포트)

0이다

messageListener 이벤트 처리기 기능을 만들어야합니다. 여기에서 event.origin이 열린 페이지인지 확인하여이 메시지가 실제로 해당 페이지에 있음을 확인해야합니다.

열려있는 페이지에서 보내는 내용은 모든 것이 정상적으로 처리되었는지 확인하는 데 사용할 수 있습니다. 또는 무엇이든 보낼 수 있으며 열린 페이지의 모든 메시지에 OK가로드되었다고 가정한다고 가정합니다. messageListener

messageListener 함수에서 열려있는 페이지가 닫혀 있어야한다고 확인한 경우 닫습니다.

+0

완벽한 솔루션, 감사합니다. – ptr