解決window.showModalDialog在Firefox無法支持

在網頁程序中,
有時我們會希望使用者按下按鈕後開啓一個保持在原窗口前方的子窗口
,
而在IE,我們可以使用showModalDialog來達成
,
語法如下 :

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

範例:

window.showModalDialog("openwin.html","Arguments","dialogHeight: 200px; dialogWidth: 200px; dialogTop: 10px; dialogLeft: 10px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");

但是.Firefox中卻沒有showModalDialog這東西,
而在FireFox中我們只能使用window.open實現這樣的功能
,
window.open
的語法如下 :

oNewWindow = window.open( [sURL] [, sName] [, sFeatures] [, bReplace])

只是,Firefox,window.open的參數中,sFeature多了一些功能設定,
而在FireFox下要讓開啓的窗口跟IEshowModalDialog一樣的話
,
只要在sFeatures中加個modal=yes就可以了
,
範例如下:

window.open('openwin.html','newWin','modal=yes,width=200,height=200,resizable=no,scrollbars=no');

提到了子窗口,不得不提的就是子窗口跟母窗口間的交互操作,
因爲我想很多人開啓對話窗口應該都是爲了將操作完的結果丟回去給母窗口...

如果是用showModalDialog的話,
在子窗口中要存取母窗口的函數的話
,
要注意兩個地方
,
1.(
母窗口中)開啓窗口:

window.showModalDialog("openwin.html",self,'modal=yes,width=775,height=700,resizable=no,scrollbars=no');

在第二個參數(vArguments),改成self.

2.(子窗口中)調用母窗口的函數:

window.dialogArguments.ShowMsg(obj.value);

ShowMsg爲母窗口中的函數.

而使用window.open的話,
則是要注意一個地方
,
1.(
子窗口中)調用母窗口的函數:

window.opener.ShowMsg(obj.value);

使用window.opener去接母窗口的對象.

如此一來,只要再透過navigator.appName去判斷瀏覽器爲何,
就可以寫一個IEFireFox兼容的函數...

例子如下:

在一個父窗口中打開一個子窗口,並把子窗口的值傳遞給父窗口

在父窗口中:

<script language="javascript">
function colorpick(obj){
if (window.showModalDialog!=null)//IE判斷
{
var smd= window.showModalDialog("Default2.aspx","","dialogWidth:225px;dialogHeight:170px;status:no;help:no;scrolling=no;scrollbars=no");
if(smd!=null)
obj.style.background=rtn;
return;
}
else
{
this.returnAction=function(strResult){
if(strResult!=null)
obj.style.background=strResult;
}
window.open("Default2.aspx","","width=225,height=170,menubar=no,toolbar=no,location=no,scrollbars=no,status=no,modal=yes");
return;
}

}
</script>

在子窗口中:

function act(RGB) {
if (window.showModalDialog!=null)//IE判斷
{
parent.window.returnValue="#"+RGB;
window.close();//firefox不支持

}
else
{
window.opener.returnAction("#"+RGB);
top.close();//IE和FireFox都支持
}
}

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