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

Problemas de janela modal padronizada em js![window.dialogArguments]

Há alguns dias, encontrei um problema de compatibilidade do navegador ao fazer um projeto, após resolver, vou registrar aqui e também postar materiais sobre modais!

Descrição detalhada do problema:

Ao abrir uma janela emergente em um navegador Firefox, a subpágina é uma página de paginação. Após clicar na próxima página, a subpágina é recarregada e o objeto window.dialogArguments desaparece, o alerta exibe undefined [solução encontrada no terceiro item]

Recentemente, ao fazer um site, precisei usar a função de janela modal e encontrei alguns problemas, então consultei materiais para resolver

1Métodos para abrir janelas emergentes:

a.window.open(pageURL,name,parameters);
O método b.window.showModalDialog() é usado para criar uma janela de diálogo modal que exibe conteúdo HTML (IE 4+suporta)
O método c.window.showModelessDialog() é usado para criar uma janela de diálogo não modal que exibe conteúdo HTML (IE 5+suporta)

2O problema de estilo de exibição: Aqui é usado window.showModalDialog(), o método de popup da janela exibida no IE6exibe mais do que IE7 ,IE8 A altura abaixo deve ser menor, então você pode escrever um js para resolver isso (IE6A altura abaixo precisa+35PX à esquerda e à direita, a propriedade dialogLeft pode ser configurada com base na largura da tela)
Fragmento de código如下:

 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;
//Método de popup
 if(url.indexOf("?")<0){window.showModalDialog(url+'?setTime='+newDate().getTime(),obj,windowStatus);}
 else{window.showModalDialog(url+'&setTime='+newDate().getTime(),obj,windowStatus);}

3O problema de perda do objeto .dialogArguments no navegador FF: Ao exibir dados de paginação na janela showModalDialog, clique nas informações da página, obtenha o ID de dados de paginação, e passe ao pai da janela popup. Funciona bem no IE, mas no FireFox 3.0 ao executar, se a página não saltar, você pode chamar normalmente window.dialogArguments, se a página saltar, a referência window.dialogArguments será perdida

Aqui está2Método de solução:

a. Coloque a página da janela showModalDialog dentro de frameset ou iframe, e faça um pacote.
Exemplo:
window.showModalDialog("test.aspx");

conteúdo da página test.aspx

<frameset cols="0,*>
<frame src=""/>
<frame src="página de exibição de dados de paginação"/>
</frameset> 

O método de retorno da página muda para

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

Dessa forma, você pode obter o valor retornado

b. Se não quiser criar uma nova página, você pode usar o método a seguir, que utiliza o objeto window.opener.document, que é o IE7,IE8Parece que não são compatíveis (foi testado, não sei como está no seu computador), verifique qual navegador está sendo usado, atribua o valor ao campo oculto da página pai e a página pai tratará posteriormente;

O código está如下:

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

Todos os problemas básicos já foram resolvidos, sobre a transmissão de valores entre a página pai e a página filha, pode-se consultar outros materiais com mais frequência

Você também pode gostar