2017-05-23 41 views
1

有沒有一種方法可以在使用javascript(不同來源)在新窗口中打開url時加載窗口?請求發送後關閉用javascript打開的窗口

下正常工作:

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

但顯然它關閉窗口http://myexternalsite/?stuff=blah請求已發送之前。我不在乎收到回覆,只確保請求完成。

我不能將window.close()事件添加到響應頁面,因爲這不是打開它的腳本......所以看起來我只剩下一個手動超時並希望它能及時完成。

我也不能只是做一個簡單的http請求,因爲該網站在https上運行,並且調用的是沒有ssl證書的(內部網絡)服務器。

+0

爲什麼你不讓AJAX獲取請求給定的URL,你可以處理所有的結果狀態,這是更好的方法 –

+0

爲什麼你不切換到您的URL的AJAX請求?順便說一句你嘗試添加一個'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是您打開的頁面,以便該消息實際上來自該頁面。

您從打開的頁面發送的message可用於驗證一切是否正常,或者您可以發送任何內容並假設來自打開的頁面的任何消息意味着它已裝載正常。

如果您在messageListener函數中確定打開的頁面已驗證應該關閉它,請關閉它。

+0

完美的解決方案,謝謝 – ptr