js模式化窗口問(wèn)題![window.dialogArguments]
前些天做項(xiàng)目時(shí)遇到了個(gè)瀏覽器兼容問(wèn)題,解決后記錄一下,也將模式化的資料放上!
詳細(xì)問(wèn)題描述:
在火狐瀏覽器中彈出一個(gè)子窗口,子頁(yè)面中是一個(gè)分頁(yè),點(diǎn)下一頁(yè)后子頁(yè)面會(huì)刷新,然后window.dialogArguments對(duì)象就丟失了,alert輸出顯示undefined [解決方法見(jiàn)第三項(xiàng)]
最近做網(wǎng)站的時(shí)候需要用到模式化窗口功能,也遇到了一些問(wèn)題,所以查了查資料以解決
1.彈出窗口幾種方法:
a.window.open(pageURL,name,parameters);
b.window.showModalDialog()方法用來(lái)創(chuàng)建一個(gè)顯示HTML內(nèi)容的模態(tài)對(duì)話框(IE 4+支持)
c.window.showModelessDialog()方法用來(lái)創(chuàng)建一個(gè)顯示HTML內(nèi)容的非模態(tài)對(duì)話框(IE 5+支持)
2.顯示樣式問(wèn)題:所用到的是window.showModalDialog(),此方法彈出的窗口在IE6下顯示比IE7 ,IE8 下高度要小點(diǎn),所以你可以寫(xiě)個(gè)js 解決這點(diǎn)(IE6下高度需要+35PX左右, dialogLeft 屬性可以根據(jù)屏幕寬度設(shè)置)
代碼片段如下:
var swidth=window.screen.width;
if(parseInt(width)>swidth)
swidth=100;
else
swidth=(swidth-parseInt(width))/2;
varwindowStatus="dialogWidth:"+width+"px;dialogHeight:"+height+"px;dialogTop:80px;dialogLeft:"+swidth+"px;center:1;status:no;scroll:no;resizable:no;help:no;";
//彈出方法
if(url.indexOf("?")<0){window.showModalDialog(url+'?setTime='+newDate().getTime(),obj,windowStatus);}
else{window.showModalDialog(url+'&setTime='+newDate().getTime(),obj,windowStatus);}
3.dialogArguments對(duì)象FF瀏覽器中丟失問(wèn)題: 彈出showModalDialog窗口中需要分頁(yè)顯示數(shù)據(jù),點(diǎn)擊頁(yè)面中的信息,獲取分頁(yè)數(shù)據(jù)的ID,傳給彈出的父窗口。在IE下運(yùn)行很正常,但在FireFox 3.0中運(yùn)行時(shí),如果頁(yè)面不跳轉(zhuǎn)則可以正常的調(diào)用window.dialogArguments,若頁(yè)面一跳轉(zhuǎn)則會(huì)丟失window.dialogArguments的引用
現(xiàn)給出2種解決方法:
a.將showModalDialog窗口的頁(yè)面放在frameset或者iframe里面,進(jìn)行一次包裝。
例:
window.showModalDialog("test.aspx");
test.aspx 頁(yè)面內(nèi)容
<frameset cols="0,*"> <frame src=""/> <frame src="分頁(yè)顯示數(shù)據(jù)的頁(yè)面"/> </frameset>
頁(yè)面返回方法變成
function returnValue(flag)
{
var myObj = window.parent.dialogArguments;
myObj.value = flag;
window.parent.close();
}
這樣就可以拿到返回的值了
b. 如果不想多弄出來(lái)個(gè)頁(yè)面,可以用下面的方法,此方法可以用到了window.opener.document 對(duì)象,此對(duì)象IE7,IE8貌似都不支持(本人測(cè)試過(guò),不知道在你機(jī)器上咋樣),判斷下是什么瀏覽器,然后給父頁(yè)面的隱藏域賦值,然后父頁(yè)面再處理;
代碼如下:
function returnValue(flag)
{
document.getElementById("rValue").value=flag;
if (window.ActiveXObject) //IE瀏覽器
{
var myObj = window.dialogArguments;
//alert(myObj);
myObj.value = flag;
window.close();
}
else{
window.opener.document.getElementById("hid_oilid").value=flag;
window.opener.document.getElementById("txt_oil").value=flag+"號(hào)";
//self.close();
window.close();
}
}
基本所遇到問(wèn)題均已經(jīng)解決,關(guān)于父頁(yè)面與子頁(yè)面?zhèn)髦悼梢远鄥㈤喥渌Y料
- 在html中引入外部js文件,并調(diào)用帶參函數(shù)的方法
- python 把數(shù)據(jù) json格式輸出的實(shí)例代碼
- jsp 網(wǎng)站引入外部css或者js失效問(wèn)題解決
- js學(xué)習(xí)筆記之事件處理模型
- 原生js代碼實(shí)現(xiàn)圖片放大境效果
- JS給Array添加是否包含字符串的簡(jiǎn)單方法
- 淺談js對(duì)象屬性 通過(guò)點(diǎn)(.) 和方括號(hào)([]) 的不同之處
- 淺談js繼承的實(shí)現(xiàn)及公有、私有、靜態(tài)方法的書(shū)寫(xiě)
- js基礎(chǔ)之DOM中document對(duì)象的常用屬性方法詳解
- Javascript 動(dòng)態(tài)改變imput type屬性
相關(guān)文章
jquery將標(biāo)簽元素的高設(shè)為屏幕的百分比
這篇文章主要介紹了js將標(biāo)簽元素的高設(shè)為屏幕的百分比,需要的朋友可以參考下2017-04-04
JavaScript冒泡算法原理與實(shí)現(xiàn)方法深入理解
這篇文章主要介紹了JavaScript冒泡算法,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript冒泡算法基本原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-06-06
微信小程序用戶授權(quán)彈窗 拒絕時(shí)引導(dǎo)用戶重新授權(quán)實(shí)現(xiàn)
我們?cè)陂_(kāi)發(fā)小程序時(shí),如果想獲取用戶信息,就需要獲取用的授權(quán),如果用戶誤點(diǎn)了拒絕授權(quán),我們?cè)趺礃尤フ_的引導(dǎo)用戶重新授權(quán)呢。今天就來(lái)給大家講講如果正確的引導(dǎo)用戶授權(quán),需要的朋友可以參考下2019-07-07
JavaScript之BOM?location對(duì)象+navigator對(duì)象+history?對(duì)象
這篇文章主要介紹了JavaScript?BOM中的?location對(duì)象、navigator對(duì)象、history?對(duì)象,下面圍繞他們的相關(guān)語(yǔ)法及各種資料展開(kāi)文章詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)大家有所幫助2021-12-12
JavaScript實(shí)時(shí)更新當(dāng)前的時(shí)間的示例代碼
這篇文章主要介紹了JavaScript實(shí)時(shí)更新當(dāng)前的時(shí)間的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
js+CSS 圖片等比縮小并垂直居中實(shí)現(xiàn)代碼
本例子在在 ff 2.0/ ie6 / ie7 中測(cè)試通過(guò)。但在 opera 8.5 cn中沒(méi)有通過(guò)。希望大家測(cè)試。2008-12-12

