Chrome不支援showModalDialog模態對話方塊和無法返回returnValue的問題

來源:互聯網
上載者:User

最近項目又用.net伺服器控制項真不爽!

發現在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等瀏覽器下都可以通用了。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.