English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il y a quelques jours, j'ai rencontré un problème de compatibilité du navigateur lors de la création du projet, après la résolution, je le note et je mets également les informations sur la modalisation !
Description détaillée du problème :
Lorsque j'ai ouvert une fenêtre contextuelle dans le navigateur Firefox, la sous-page contient une pagination, après avoir cliqué sur la page suivante, la sous-page se rafraîchit et l'objet window.dialogArguments est perdu, alerte affiche undefined [solution détaillée dans le troisième point]
Lorsque j'ai récemment travaillé sur un site web, j'ai besoin de la fonctionnalité de fenêtre modalisée et j'ai rencontré quelques problèmes, donc j'ai cherché des informations pour résoudre le problème
1Différentes méthodes pour ouvrir une fenêtre contextuelle :
a.window.open(pageURL,name,parameters);
La méthode b.window.showModalDialog() est utilisée pour créer une boîte de dialogue modale affichant du contenu HTML (IE 4+est pris en charge)
La méthode c.window.showModelessDialog() est utilisée pour créer une boîte de dialogue non modale affichant du contenu HTML (IE 5+est pris en charge)
2Problème de style d'affichage : Le méthode utilisé est window.showModalDialog(), la fenêtre pop-up de cette méthode dans IE6affichage en dessous est plus grand que IE7 ,IE8 la hauteur en dessous doit être un peu plus petite, donc vous pouvez écrire un js pour résoudre ce problème (IE6la hauteur en dessous doit être+35PX de chaque côté, l'attribut dialogLeft peut être réglé en fonction de la largeur de l'écran)
Extrait de code :
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éthode d'aperçu if(url.indexOf("?')<0){window.showModalDialog(url+'?setTime='+newDate().getTime(),obj,windowStatus);} else{window.showModalDialog(url+'&setTime='+newDate().getTime(),obj,windowStatus);}
3Problème de perte de .dialogArguments dans le navigateur Firefox : Il est nécessaire de visualiser les données de pagination dans la fenêtre showModalDialog, cliquer sur l'information de la page, obtenir l'ID des données de pagination, et le transmettre à la fenêtre parente pop-up. Il fonctionne normalement sous IE, mais dans Firefox 3.0 au moment de l'exécution, si la page ne saute pas, window.dialogArguments peut être appelé normalement, mais si la page saute, la référence de window.dialogArguments est perdue
Voici2Solution :
a. Placer la page de la fenêtre showModalDialog dans frameset ou iframe et la conditionner une fois.
Exemple :
window.showModalDialog("test.aspx");
contenu de la page test.aspx
<frameset cols="0,*> <frame src=""/> <frame src="page d'affichage des données de pagination"/> </frameset>
Le méthode de retour de la page devient
function returnValue(flag) { var myObj = window.parent.dialogArguments; myObj.value = flag; window.parent.close(); }
De cette manière, vous pouvez obtenir la valeur retournée
b. Si vous ne voulez pas créer une page supplémentaire, vous pouvez utiliser la méthode suivante, cette méthode utilise l'objet window.opener.document, cet objet IE7,IE8Il semble que ce ne soit pas pris en charge (j'ai testé, je ne sais pas comment cela fonctionne sur votre machine), vérifiez quel navigateur est utilisé, puis affectez la valeur au champ caché de la page parent, puis la page parent traite;
Le code suivant :
function returnValue(flag) { document.getElementById("rValue").value=flag; if (window.ActiveXObject) //Navigateur 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+"guillemets"; //self.close(); window.close(); } }
Toutes les questions fondamentales ont été résolues, concernant la transmission de valeurs entre la page parent et la page enfant, il est recommandé de consulter d'autres ressources