Chrome不支持showModalDialog的解决方案
生活随笔
收集整理的這篇文章主要介紹了
Chrome不支持showModalDialog的解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Chrome不支持showModalDialog的解決方案??
昨天在使用showModalDialog的時候,遇到如下問題:
如果子窗口被刷新過,那么父窗口就接受不到子窗口的返回值。 為了解決這個問題,哎,我糾結了好久,最后才發現不是代碼的問題,而是多瀏覽器兼容問題,因為我是用Chrome調試的,而Chrome是不支持showModalDialog的,所以父窗口才沒有收到子窗口的返回值的,在IE下就沒有這個問題了。 后來在網上查了一下,原來在chrome下用showModalDialog打開的并不是模態窗口,而是和打開一個普通頁面一樣,父窗口還是可以獲取焦點,執行相關操作。所以父窗口用var returnValue=window.showModalDialog(url[,vArguments][,sFeatures])接收子窗口的返回值時,這個returnValue總是undefined。因為在chrome下,即使是用window.showmodalDialog()打開一個新窗口,那也還是和window.open()一樣,我們可以在子窗口通過如下js腳本驗證一下window.opener是否為空
<script type="text/javascript">alert(window.opener);
</script> ? 通過調試,可以發現,在chrome中,顯示的是一個[object window]對象,而IE則是undefined。現在知道原來chrome將showModalDialog當作window.open來處理了。也就是說如果我們想在chrome下給父窗口返回值,不能直接用window.returnValue,而是應該用window.opener.returnValue。 所以,在用showModalDialog時,并且父窗口和子窗口之間存在傳值時,如果想兼顧IE和chrome,可以做如下處理: 父窗口js腳本:
var returnValue = window.showModalDialog("son.html ", window,"dialogWidth:400px;dialogHeight:400px");
//for chrome
if (!returnValue) {returnValue = window.returnValue;
} ?
子窗口js腳本:
if (window.opener) {//for chromewindow.opener.returnValue = "opener returnValue";
}
else {window.returnValue = "window returnValue";
}
window.close();//關閉子窗口 ?
PS:以上的代碼環境是IE 8.0.7601.17514和Chrome?22.0.1229.95 m,其他瀏覽器也沒有仔細去測試過,有興趣的人可以自己測試測試,總結總結,俺這種半吊子菜鳥就是個小混混。。。 此外,順便把showModalDialog的基本用法也寫一寫吧,都是網上的 一、基本使用 語法:returnValue=window.showModalDialog(sURL[,vArguments][,sFeatures]) 參數說明: sURL:子窗口的URL。 vArguments:父窗口想要傳給子窗口的參數。(子窗口可以通過window.dialogArguments來獲取該參數) sFeatures:描述子窗口的外觀信息等。 dialogHeight——子窗口的高度; dialogWidth——子窗口的寬度; dialogLeft——子窗口離屏幕左邊的距離; dialogTop——子窗口離屏幕上邊的距離; center——子窗口是否居中顯示,默認yes,但仍可以指定高度和寬度(還可以指定dialogLeft和dialogTop了嗎?) help——是否顯示幫助按鈕,默認yes; resizable——是否可以被改變大小,默認no; status——是否顯示狀態欄,默認yes[Modeless]或者no[Modal](不明白,沒體會) scroll——指明對話框是否顯示滾動條,默認為yes 示例:
//打開一個寬高均400px,無狀態欄無幫助不能調節大小且居中屏幕的窗口?
var sUrl = 'page0.aspx'; ?
window.showModalDialog(sUrl, window, "dialogWidth:400px;dialogHeight:400px;status:0;help:0;resizable:0;center:1;"); 二、控制父窗口 定義模式窗口時,設定 window 為對話框參數,則在該窗口中,可通過window.dialogArguments來控制父窗口的一切元素。 示例: var oParent = window.dialogArguments; //獲取父窗口對象?
oParent.location.reload(); //父窗口刷新,當然還可以做其他操作 ?
三、傳值 如最開始解決chrome不能接收子窗口返回值那個例子再好不過啦。 四、提交表單會打開新窗口的問題 哎,這個問題遇到過兩次,兩次都是問的Green,果然,有些時候,有些知識點,不自己寫一下就是記不住啊!古語云“好記性不如爛筆頭”,這話是不是要改成“好記性不如碼字工”了,囧。。。。。 言歸正傳啊,這個問題只要在<head>內加入一下代碼即可:<base target="_self"/> 再啰嗦兩句啊,其實這個base標簽的target屬性很早以前就所有了解,也大致知道每個屬性值的含義,可是遇到問題就不知道這里用上這么簡單的一句就好了,果然光看書是沒有用的哇,貴在實踐,實踐,實在是賤-_-|||
其他還有什么緩存問題、Session丟失問題什么什么的,我都還沒用過,寫了也是記不住,就不寫啦,哎,像我這種懶人,什么時候技術才能有所進步啊!!! 參考資料: 1、showModalDialog模式窗口的若干問題? 2、window.open詳解 3、Chrome不支持showModalDialog模態對話框和無法返回returnValue的問題總結
以上是生活随笔為你收集整理的Chrome不支持showModalDialog的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国二次元行业深度调
- 下一篇: php多表存储,php – MySq