IE的模態對話框裏的問題還真是不少

    模態對話框(Modal Dialog),是一種會block順序執行程序的窗口,比如C#裏的MessageBox.Show(this,...),JavaScript裏的alert(...)、confirm(...)等,是我們最常見的模態對話框。不關閉這種對話框程序的當前線程就被一直掛起了,這種窗口的特性最適合用來做條件分支的判斷提示和Wizard窗口。

    在IE裏面,我們可以通過window對象的showModalDialog方法十分方便的開啓一個模態對話框。可是這個從IE4.0就開始支持的feature,居然還有一堆一堆的問題:( 比如:點超級鏈接或Submit按鈕會開啓新窗口啊,不能使用F5刷新啊,拿不到模態窗口的opener啊,等等。不過這些老問題繞來繞去都還算是被解決了。剩下的什麼怎麼在模態窗口間傳出傳入參數啊,怎麼執行其opener裏的方法啊,怎麼關閉啊,就屬於沒有好好看msdn和對DHTML的不熟悉了。

    今天一不小心又發現一個模態對話框讓人抓狂的問題,不能在裏面使用XMLHTTP對象獲取服務器數據,一調用就立刻返回空字符串。搞了半天找不到原因,於是囉裏囉唆的把模態對話框的父窗口傳到對話框內,把調用XMLHTTP對象的程序從模態窗口裏原樣移到父窗口裏,從模態窗口去調父窗口裏的方法,結果一下就取到服務器上的數據了。到這裏我還以爲找到模態對話框的bug了,回家後決定把這個bug再研究一下,結果卻很順利的從模態窗口裏調用XMLHTTP對象獲得了服務器上的數據。真是鬱悶!!!

    明天再找個機器來試試,看看到底還有沒有問題。

    如果你對JS也感興趣,不妨也來試驗一下,看看到底是我機器環境本身的原因,還是這是一個不確定的bug。

    測試代碼如下:

<html>
    
<head>
        
<title>Caller</title>
    
</head>
    
<body>
        
<button onclick="OpenDialog()">Open Dialog
    
</button>
        
<script language="javascript">
        
function OpenDialog()
        
{
            
var dlg = window.showModalDialog('Callee.htm');
        }

        
</script>
    
</body>
</html>

    存爲:Caller.htm

<html>
    
<head>
        
<title>Callee</title>
    
</head>
    
<body>
        
<table border="0" width="100%" height="100%">
            
<tr>
                
<td align="center" valign="middle">
                    
<button onclick="GetData()" ID="Button1">Open Dialog
                    
</button></td>
            
</tr>
        
</table>
        
<script language="javascript">
        
function GetData()
        
{
            
var url = 'http://www.google.com';
            __XmlHttpPool__.GetRemoteData(url, alert);
        }

        
</script>
        
<script language="javascript"></script>
    
</body>
</html>

    存爲:Callee.htm 

    歡迎回復您的實驗結果,同時也歡迎討論模態窗口的其它問題及解決方法。 

發佈了147 篇原創文章 · 獲贊 0 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章