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