国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

Chrome不支持showModalDialog模態對話框和無法返回returnValue問題的解決方法

2024-05-06 16:32:39
字體:
來源:轉載
供稿:網友

What?模態對話框失效了?

上個禮拜修改測試一個后臺管理項目,在測試與各個瀏覽器兼容性的時候,發現在chrome瀏覽器下showModalDialog方法顯示的并不是模態對話框,就像新打開一個頁面一樣,父窗口仍然可以隨意獲取焦點,并可以打開多個窗體,而且返回值returnValue也無法返回,一直是undefined。這么多問題很令人頭疼,下面就各個主流最新版的瀏覽器進行了一下測試。

 

瀏覽器 是否支持 狀態
IE9  
Firefox13.0  
safari5.1  
chrome19.0 × 并不是模態對話框,而是open了一個新窗體
Opera12.0 × 什么也發生,連個窗體都不彈

 

Chrome到底打開的是什么

因為打開的不是模態對話框,而是像open了一個新窗體一樣,那只要驗證一下子窗體window.opener是否為空就明白了。

<script type="text/javascript">    alert(window.opener);</script>

在chrome中,顯示的是一個[object window]對象,而IE則是undefined。現在知道原來chrome將showModalDialog當作window.open來處理了。也就是說我們完全可以用window.opener來操作chrome瀏覽器下子窗體。這里還發現個很有趣的現象,firefox中測試window.opener也并不為空,于是我又測試了下使用showModalDialog在子窗體中關于window.opener和window.dialogArguments在各個瀏覽器里的狀況,由于Opera瀏覽器連個窗體都不彈,下面測試就剔除它了。

說明下父窗體的showModalDialog的方法中arguments傳遞是window對象,下面是測試的結果:

 

瀏覽器 模態對話框 window.opener window.dialogArguments returnValue
IE9 undefined [object Window]
Firefox13.0 [object Window] [object Window]
safari5.1 [object Window] [object Window]
chrome19.0 × [object Window] undefined ×

 

以上是我測試的結果,各個瀏覽器所支持的程度還是不一樣的。還要說一下Firefox瀏覽器下,子窗體假如刷新的話window.dialogArguments照樣會丟失,變成undefined。以上結果中我們可以看出返回值returnValue就只有chrome瀏覽器返回的是undefined,其他瀏覽器都沒有問題。那該如何解決這個問題呢?

解決returnValue問題

通過以上的種種測試,我們已經知道chrome的showModalDialog方法很像執行了window.open方法,那么我們可以利用window.opener來實現window.returnValue的功能。

注意:temp=Math.random()這個隨機參數是為了解決緩存問題,不少朋友測試出undefined是因為是緩存的問題。 追加于2012-10-17

父窗體部分js代碼:

window.onload = function () {  var returnValue = window.showModalDialog("son.html?temp=" + Math.random(), window);  //for chrome  if (returnValue == undefined) {    returnValue = window.returnValue;  }  alert(returnValue);}

子窗體部分js代碼:

if (window.opener != undefined) {    //for chrome    window.opener.returnValue = "opener returnValue";}else {    window.returnValue = "window returnValue";}window.close();

這樣也在IE,FireFox,Chrome,Safari等瀏覽器下都可以通用了。

最后

最后有人要問那該如何實現模態對話框呢?我覺得應該是可以用一些js技巧去實現的,但是我不并推薦這樣做,我也查詢了很資料都不能很好的解決這個問題。當然,也可以有其他一些思路,比如為了不彈出更多的窗體,可以在點擊打開窗體的時候將那個open按鈕設置為不可用,只有關閉了子窗體再設置成可用。這些大家都可以自己去實踐下,或許有更好的方法。

最后我想說的是在當今的網頁設計中很流行用div在頁面內去模擬一個窗體,樣式自定義,交互都很不錯,不一定非要用模態窗體,如何模擬網上一大把,今天就寫到這里吧,有什么錯誤的地方請大家多指正~~


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜平县| 垫江县| 江油市| 罗甸县| 榆林市| 榆树市| 洱源县| 秀山| 扬中市| 汕头市| 江阴市| 全州县| 虎林市| 碌曲县| 永昌县| 垦利县| 栾川县| 高碑店市| 莎车县| 襄樊市| 庄浪县| 霍林郭勒市| 老河口市| 古交市| 宁河县| 三门峡市| 延安市| 务川| 凤冈县| 山东| 合作市| 靖远县| 东乌珠穆沁旗| 云梦县| 邢台县| 明光市| 永靖县| 平果县| 岳阳县| 正蓝旗| 泰宁县|