2017-05-23 23 views
1

javascript(別の起点)を使用して新しいウィンドウでURLを開くときにウィンドウを閉じる方法はありますか? リクエストが送信された後、javascriptで開いたウィンドウを閉じる

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ページ(プロトコル+ホスト名+ポートのホストと一致する必要があります文字列です)

messageListenerイベントハンドラ関数を作成する必要があります。この場合、開封したページがevent.originであることを確認して、このメッセージが実際にそのページにあることを確認する必要があります。

開かれたページから送信すると、すべてが正常かどうかを確認したり、何かを送信したり、開かれたページからのメッセージがOKをロードしたというメッセージがあると仮定して送信することができます。

messageListener機能で、開いているページが閉じていることが確認されたと判断した場合は、閉じます。

+0

完璧なソリューション、ありがとう – ptr

関連する問題