Chrome從版本37開始默認停止支持window.showModalDialog(註冊表可以修改到2065438+2005年5月)。
對於從瀏覽器手動打開的非模態窗口,從我意識到自關閉的問題開始,Chrome就已經不支持了——比如妳給自己的頁面做了註銷功能,點擊後想用妳說的自關閉方法關閉這個頁面,在Chrome上是關閉不了的(但是妳可以指定另壹個顯示註銷狀態的頁面,效果也是壹樣的,註銷也不用關閉那個頁面)。
現在它已經不再支持showModalDialog,非模態窗口也不允許自關閉,所以從代碼中完全禁止自關閉是合理的。
解決方案:
解決showModalDialog的問題,可以自己模擬壹個模態窗口,比如iframe,就像微博裏的轉發窗口壹樣。點擊後,用戶將無法操作原頁面的其他元素。但是如果模擬的話,主要會遇到JS繼續執行的問題。showModalDialog會阻止原頁面JS繼續執行,直到獲得新窗口的返回結果。如果自己模擬這種行為,可以考慮回調模式。時間和篇幅有限,就不細說了。每個想替換showModalDialog的人都會遇到這個問題,網上應該能找到很多打包的方法。
先說說為什麽需要自己寫壹個showModalDialog的原因。在Chrome宣布停止支持showModalDialog之後,FireFox也首次在文檔和DebugTool中表明也將停止支持showModalDialog。還沒正式停,大概是在等用戶對Chrome的反應。
ShowModalDialog本來畢竟是IE獨有的,還沒有被納入W3C標準。Chrome對它的支持壹直很差。例如,如果您從壹個頁面打開showModalDialog,您可以轉到其他頁面,查看原始頁面,甚至對原始頁面進行操作,但這些操作只有在您關閉showModalDialog後才能起作用。
不過火狐對showModalDialog的支持壹直都很好,和IE基本壹致,只是IE在慢慢的遵循W3C標準(尤其是新的IE11),火狐拋棄showModalDialog只是時間問題。
最後,您“繪制”的模式對話框完全在您的控制之下,您可以公開壹個關閉接口,以允許父窗口打開的模式對話框從子窗口關閉。
(最近沒被這個困擾,這麽多碼,跟吐壹樣...)