天天看點

[轉]關于“網頁對話框”中連結和表單送出會在新視窗中打開的問題

FROM : ​

環境:

Windows XP SP2, IE6

現象:

在腳本中使用 window.showModalDialog() 或 window.showModelessDialog() 彈出的“網頁對話框”中含有連結或表單,當點選連結或者送出表單時,轉向的結果頁面會在一個新彈出的網頁視窗中顯示,而不是在目前“網頁對話框”自身内部顯示。

解決方法:

方法1(不推薦)先做一個包含架構(frame 或 iframe)的頁面,使用上述方法彈出對話框時顯示的是架構頁面,而真正要顯示的頁面放在架構頁内部的架構中顯示。

缺點:實作有些複雜,需要多建立一個架構頁面。如果僅僅要做一個這樣對話框還好應付,但要做很多的話就不好辦了。那樣的話可能要很多個架構頁,或者隻做一個架構頁,實際要顯示的頁面位址通過上述兩個函數中的第二個參數傳給架構頁,然後在架構頁中用腳本動态将實際頁面加載到架構中。

使用方法1時對于對話框的傳回值也要注意,因為此時實際頁面是在架構中,是以傳回值要使用“window.parent.returnValue”來指定。

方法2(推薦!)不需要架構頁。要做的僅僅是在對話框要顯示的頁面中<head></head>标簽内加入“<base target="_self" />”。

這樣點選普通的連結或是送出表單後,新的頁面還是會在目前對話框中顯示。

要注意的是,<a>和<form>标簽也都有“target”屬性。如果要使用方法2,一定要如前所述加上“<base target="_self" />”,并且<a>和<form>中的“target”屬性必須為空值。如果你指定了不為空的<a>和<form>的“target”屬性,不管怎樣,轉向的頁面都不會在目前對話框内部打開的。不知這是我的運作環境問題還是IE的BUG。

方法2中對話框傳回值可以直接指定“window.returnValue”。