English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Problema della finestra di dialogo modellata in js![window.dialogArguments]

Di recente, durante la realizzazione di un progetto, ho incontrato un problema di compatibilità del browser, dopo averlo risolto, lo registro e anche metto in evidenza le informazioni sulla modalizzazione!

Descrizione dettagliata del problema:

Quando si apre una finestra secondaria nel browser Firefox, se la pagina secondaria è una pagina di paginazione e si clicca sulla pagina successiva, la pagina secondaria si aggiorna e poi l'oggetto window.dialogArguments viene perso, l'output di alert mostra undefined [soluzione nel punto numero tre]

Durante la creazione del sito web di recente, ho avuto bisogno di funzionalità di finestre modal e ho incontrato alcuni problemi, quindi ho cercato informazioni per risolverli

1. Diversi metodi di apertura delle finestre pop-up:

a.window.open(pageURL,name,parameters);
Il metodo b.window.showModalDialog() viene utilizzato per creare una finestra di dialogo modale che visualizza contenuti HTML (supportato da IE 4+)
Il metodo c.window.showModelessDialog() viene utilizzato per creare una finestra di dialogo non modale che visualizza contenuti HTML (supportato da IE 5+)

2. Problema di stile di visualizzazione: utilizza window.showModalDialog(), il metodo di apertura della finestra pop-up in IE6 è più piccolo rispetto a IE7, IE8, quindi puoi scrivere un js per risolvere questo problema (in IE6 l'altezza deve essere +35PX circa, l'attributo dialogLeft può essere impostato in base alla larghezza dello schermo)
代码片段如下:

 var swidth=window.screen.width;
 if(parseInt(width)>swidth)
 swidth=100;
 else
 swidth=(swidth-parseInt(width))/2;
var windowStatus="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对象FF浏览器中丢失问题: 弹出showModalDialog窗口中需要分页显示数据,点击页面中的信息,获取分页数据的ID,传给弹出的父窗口。在IE下运行很正常,但在FireFox 3.0中运行时,如果页面不跳转则可以正常的调用window.dialogArguments,若页面一跳转则会丢失window.dialogArguments的引用

现给出2种解决方法:

a.将showModalDialog窗口的页面放在frameset或者iframe里面,进行一次包装。
例:
window.showModalDialog("test.aspx");

test.aspx 页面内容

<frameset cols="0,*">
<frame src=""/>
<frame src="分页显示数据的页面"/>
</frameset> 

页面返回方法变成

function returnValue(flag)
{
 var myObj = window.parent.dialogArguments;
 myObj.value = flag;
 window.parent.close();
{}

In questo modo si può ottenere il valore restituito

b. Se non si desidera creare una pagina aggiuntiva, si può utilizzare il metodo seguente, che utilizza l'oggetto window.opener.document. Questo oggetto non sembra essere supportato in IE7 e IE8 (lo ho testato, non so come funziona sul tuo computer), quindi determinare il tipo di browser, assegnare il valore nascosto alla pagina padre e poi la pagina padre elabora;

Il codice è il seguente:

function returnValue(flag)
 {
 document.getElementById("rValue").value=flag;
 if (window.ActiveXObject) //browser 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+"号";
 //self.close();
 window.close();
 {} 
 {}

Tutte le questioni di base sono state risolte, per quanto riguarda la trasmissione dei valori tra la pagina padre e la pagina figlia, si possono consultare altri materiali

Ti potrebbe interessare