2016-07-31 64 views
1

我正在研究一個基本的oauth認證原型,並且我有一個HTML(稱爲parent.html)打開一個子窗口來實現這個目的。子窗口將被重定向到提供商網站,然後轉到我的註冊頁面。我的註冊頁面將使用JavaScript來調用window.close();關閉子窗口。爲什麼在Microsoft Edge中出現關閉警告?

但是當我在Microsoft Edge中嘗試我的原型時,我發現每次javascript試圖關閉子窗口時都會收到警告。我測試了其他使用彈出窗口進行oauth身份驗證的網站,比如dropbox,在完成身份驗證並且子窗口即將關閉時,我沒有看到相同的關閉警告。

有誰知道爲什麼(以及在什麼情況下)Edge顯示此警告對話框?任何信息將是有用的和讚賞。謝謝。

Screenshot of the close warning

+0

誰/是什麼打開了此窗口的警告?你或JavaScript? – acdcjunior

+0

您只能使用window.open打開的JavaScript自動關閉窗口。 –

+0

子窗口是由parent.html使用child = window.open()打開的,但是在一些重定向之後,子窗口失去了window.opener引用,並且父窗口也失去了子引用。不知道這是否是原因。 –

回答

0

這是因爲彈出阻斷劑和自動化腳本阻滯劑特徵在MS邊緣的。基本上這兩個功能將嘗試阻止在加載頁面期間無需用戶操作而自動運行的任何腳本。

例如,這兩個腳本將在MS邊緣阻止(他們工作在IE):如果你把它們放在一個函數,從一個click事件給他們打電話

var w = window.open("page.htm"); //w will be null. 

window.close(); //displays a warning. 

相同的兩條線將工作例如,按鈕。


解決方案:

創建在主窗口的功能關閉彈出窗口,在彈出的窗口中調用該函數,並將它傳遞給彈出窗口的引用:

// in main window 
function closePopup(w) { 
    w.close(); 
} 

// in popup window 
opener.closePopup(this);