J'ai une application Web ASP.NET 3.5 où j'essaie de renvoyer une chaîne d'une fenêtre enfant à une fenêtre parente. Cela fonctionne dans FF, Chrome et Safari, mais IE est une histoire différente. Dans IE, il fonctionne la première fois mais lors de la réouverture de l'enfant et de la transmission d'une autre chaîne, la page parent se bloque au milieu du PostBack.IE se bloque à la deuxième fois qu'une valeur est passée à une fenêtre parente avec Javascript
Pour la fenêtre parent ascx, je donne les résultats suivants:
<script type="text/javascript">
function openMediaManager() {
// This is called to open the child window.
window.open('/mediamanager.aspx', 'mediamanager', 'width=685, height=530');
}
function setImagePath(img) {
// This is called by the child window to pass the string to the parent.
<asp:Literal ID="NewImgPostBack" runat="server" />
}
</script>
Et un extrait du code sous-jacent pour générer le __doPostBack() appel:
protected override void Render(HtmlTextWriter writer)
{
// Not using the Button's OnClick because I have to use FindControl() to get the button.
string postBack = Page.ClientScript
.GetPostBackEventReference(MediaManagerButton, string.Empty)
.Replace("''", "{0}");
NewImgPostBack.Text = string.Format(postBack, "img");
base.Render(writer);
}
Chez l'enfant ascx, je J'appelle la fonction suivante avec un chemin d'accès à un fichier (exemple: "/image.png"):
<script type="text/javascript">
function sendValueToParent(path) {
// Called by the child to pass a string (path to an image) to the parent.
window.opener.setImagePath(path);
window.close();
}
</script>
Any des idées pourquoi cela ne serait que dans IE? J'utilise IE 7, mais j'ai également lu le même problème dans IE 6 (dont la plupart des utilisateurs finaux auront).
Une référence à un problème similaire: Why does Internet Explorer 7 hang bizarrely when child window scripts the parent window to submit?
EDIT
Si je considère la source du parent (enfant a déjà fermé), alors que la page semble se bloquer dans IE, je vois ce qui suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>title
</title><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link id="ctl00_SiteStyle" rel="stylesheet" type="text/css" href="/App_Themes/20/css/a.css?v=3.0.0.1" />
<script type="text/javascript" src="/javascript/_common.js"></script>
<script type="text/javascript" src="/javascript/_calendar.js"></script>
</head>
<body>
<form name="aspnetForm" method="post" action="/home.aspx" id="aspnetForm">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMTY1ODQ0NjQxD2QWAmYPZBYEAgEPZBYCAgMPFgIeBGhyZWYFJy9BcHBfVGhlbWVzL1NCMjAvY3NzL2FtbGkuY3NzP3Y9My4wLjAuMWQCAw9kFgoCAQ9kFgYCAQ8PFgQeBFRleHQFCURFViBMb2dpbh4HVmlzaWJsZWhkZAIDDw8WBh8BBQhIVFRQIEdFVB4LTmF2aWdhdGVVcmwFCi9ob21lLmFzcHgfAmdkZAIFDw8WBB8BBQZMb2cgSW4fAmhkZAIFD2QWBAIDD2QWAgIBD2QWCGYPDxYCHwJnZBYEZg8PFgYeCEltYWdlVXJsBR8vaW1hZ2VzL2Ntc2ljb25zL2VkaXRfc21hbGwucG5nHghDc3NDbGFzcwURQ01TRWRpdE1lbnVfSW1hZ2UeBF8hU0ICAhYCHgtvbm1vdXNlb3ZlcgUzZGlzcGxheU1lbnUoJ2N0bDAwX0NvbnRlbnRNYWluX2N0bDAxX2N0bDAwX2N0bDAxJyk7ZAIBDw8WBB8FBRRDTVNFZGl0TWVudV9NYWluTWVudR8GAgIWBB8HBRVkaXNwbGF5TWVudSh0aGlzLmlkKTseCm9ubW91c2VvdXQFEmhpZGVNZW51KHRoaXMuaWQpOxYOZg8PFgQfBQUaQ01TRWRpdE1lbnVfTWVudUl0ZW1CdXR0b24fBgICFgQfBwUXdGhpcy5vZmZzZXRQYXJlbnQubW89MTsfCAUXdGhpcy5vZmZzZXRQYXJlbnQubW89MDsWAmYPDxYEHwUFGUNNU0VkaXRNZW51X01lbnVJdGVtUGFuZWwfBgICFgQfBwUadGhpcy5jbGFzc05hbWU9J01JUEhvdmVyJzsfCAUSdGhpcy5jbGFzc05hbWU9Jyc7FgRmDw8WBh8EBSMvaW1hZ2VzL2Ntc2ljb25zL2VkaXRtb2RlX3NtYWxsLnBuZx8FBRlDTVNFZGl0TWVudV9NZW51SXRlbUltYWdlHwYCAmRkAgEPDxYGHwEFBEVkaXQfBQUYQ01TRWRpdE1lbnVfTWVudUl0ZW1UZXh0HwYCAmRkAgEPDxYEHwUFGkNNU0VkaXRNZW51X01lbnVJdGVtQnV0dG9uHwYCAhYEHwcFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTE7HwgFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTA7FgJmDw8WBB8FBRlDTVNFZGl0TWVudV9NZW51SXRlbVBhbmVsHwYCAhYEHwcFGnRoaXMuY2xhc3NOYW1lPSdNSVBIb3Zlcic7HwgFEnRoaXMuY2xhc3NOYW1lPScnOxYEZg8PFgYfBAUmL2ltYWdlcy9jbXNpY29ucy9kaXNwbGF5bW9kZV9zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQdEaXNwbGF5HwUFGENNU0VkaXRNZW51X01lbnVJdGVtVGV4dB8GAgJkZAIDDw8WBB8FBRpDTVNFZGl0TWVudV9NZW51SXRlbUJ1dHRvbh8GAgIWBB8HBRd0aGlzLm9mZnNldFBhcmVudC5tbz0xOx8IBRd0aGlzLm9mZnNldFBhcmVudC5tbz0wOxYCZg8PFgQfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1QYW5lbB8GAgIWBB8HBRp0aGlzLmNsYXNzTmFtZT0nTUlQSG92ZXInOx8IBRJ0aGlzLmNsYXNzTmFtZT0nJzsWBGYPDxYGHwQFHy9pbWFnZXMvY21zaWNvbnMvdW5kb19zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQRVbmRvHwUFGENNU0VkaXRNZW51X01lbnVJdGVtVGV4dB8GAgJkZAIFDw8WBB8FBRpDTVNFZGl0TWVudV9NZW51SXRlbUJ1dHRvbh8GAgIWBB8HBRd0aGlzLm9mZnNldFBhcmVudC5tbz0xOx8IBRd0aGlzLm9mZnNldFBhcmVudC5tbz0wOxYCZg8PFgQfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1QYW5lbB8GAgIWBB8HBRp0aGlzLmNsYXNzTmFtZT0nTUlQSG92ZXInOx8IBRJ0aGlzLmNsYXNzTmFtZT0nJzsWBGYPDxYGHwQFIS9pbWFnZXMvY21zaWNvbnMvcmVtb3ZlX3NtYWxsLnBuZx8FBRlDTVNFZGl0TWVudV9NZW51SXRlbUltYWdlHwYCAmRkAgEPDxYGHwEFBlJlbW92ZR8FBRhDTVNFZGl0TWVudV9NZW51SXRlbVRleHQfBgICZGQCBg8PFgQfBQUaQ01TRWRpdE1lbnVfTWVudUl0ZW1CdXR0b24fBgICFgQfBwUXdGhpcy5vZmZzZXRQYXJlbnQubW89MTsfCAUXdGhpcy5vZmZzZXRQYXJlbnQubW89MDsWAmYPDxYEHwUFGUNNU0VkaXRNZW51X01lbnVJdGVtUGFuZWwfBgICFgQfBwUadGhpcy5jbGFzc05hbWU9J01JUEhvdmVyJzsfCAUSdGhpcy5jbGFzc05hbWU9Jyc7FgRmDw8WBh8EBSEvaW1hZ2VzL2Ntc2ljb25zL2luc2VydF9zbWFsbC5wbmcfBQUZQ01TRWRpdE1lbnVfTWVudUl0ZW1JbWFnZR8GAgJkZAIBDw8WBh8BBQZJbnNlcnQfBQUYQ01TRWRpdE1lbnVfTWVudUl0ZW1UZXh0HwYCAmRkAggPDxYEHwUFGkNNU0VkaXRNZW51X01lbnVJdGVtQnV0dG9uHwYCAhYEHwcFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTE7HwgFF3RoaXMub2Zmc2V0UGFyZW50Lm1vPTA7FgJmDw8WBB8FBRlDTVNFZGl0TWVudV9NZW51SXRlbVBhbmVsHwYCAhYEHwcFGnRoaXMuY2xhc3NOYW1lPSdNSVBIb3Zlcic7HwgFEnRoaXMuY2xhc3NOYW1lPScnOxYEZg8PFgYfBAUfL2ltYWdlcy9jbXNpY29ucy9z
(Fin)
pensez-vous que cela pourrait être un problème ViewState? Parfois, quand je laisse la fenêtre IE ouverte, après environ 5 minutes, il semble arriver à temps et charge une page sans style.
Bonne réflexion, mais résultat identique. – Aaron
savez-vous exactement où ça se bloque? essayez d'ajouter une alerte avant la fermeture(); ou n'est-ce pas l'événement arrivant à setImagePath()? – Niko
Il arrive à setImagePath() et frappe aussi close(). Il semble raccrocher du côté serveur ...? J'ai édité la question pour donner plus de détails sur le blocage. – Aaron