2009-06-10 10 views
1

Navigateur: IE6/IE7.Remplacer le document dans la boîte de dialogue modale IE

Je veux charger un nouveau document dans ma boîte de dialogue modale html, soit via une cible de formulaire ou une fonction javascript.

<html> <!-- quirks mode --> 
<head> 
<script> 
function openModal(url) { 
    if(window.showModalDialog) showModalDialog(url); 
    else { 
     try { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); 
      open(url, "", "modal=yes"); 
     } catch (e) { 
      alert("dialog windows unsupported by browser"); 
     } 
    } 
} 
</script> 
</head> 
<body style="background:red" onload="setTimeout(function(){document.body.style.backgroundColor='white'},100)"> 
<a href="javascript:openModal(location.href)">Open Modal</a> 
<form> 
<input type="submit" value="Send Form" /> 
</form> 
<a href="javascript:location.reload()">Reload content</a> 
</body> 
</html> 

Dans les navigateurs basés sur Gecko, cela fonctionne. Dans IE, dans la boîte de dialogue modale, le formulaire ouvre une nouvelle fenêtre (même si je spécifie l'attribut target="_self") et le javascript reload() échoue silencieusement. Si j'essaie de faire un location.replace(location.href) ou location.href=_someurl_, cela ouvre une nouvelle fenêtre. Donc, ma question: comment puis-je obtenir IE pour remplacer le document actuel dans une fenêtre de dialogue modale?

Répondre

1

Une solution qui gère la <form> partie du problème: ajouter

<base target="_self" /> 

dans la section <head> de la page.

Cela ne résout cependant pas le problème de javascript.

0
window.name="SomeWindowName"; 
window.open("www.microsoft.com","SomeWindowName"); 
+0

J'ai besoin d'une fenêtre modale. – Alsciende

0

Je viens de lancer le même problème avec Internet Explorer 8, donc après avoir joué avec elle pendant un certain temps, il semble qu'il y ait des solutions telles que

location.reload();return false; 

ou

window.location = window.location; 

ou

window.location.reload(true); 

Cependant, aucun d'entre eux ne fonctionne pour moi - soit rien ne se passe, ou, dans le meilleur des cas, une nouvelle fenêtre s'ouvre.

Ce que je suis venu avec comme une sorte de solution consiste à utiliser

document.forms[0].submit(); 

Il peut ne pas fonctionner pour toutes les constellations que vous avez besoin d'un formulaire sur votre page (et assurez-vous que la soumission de formulaire ne pas effectuer de changements indésirables), mais cela a fonctionné pour moi. Assurez-vous également de ne pas oublier de mettre le

<base target="_self" /> 

dans l'en-tête de votre page comme décrit par Alsciende.

HTH

G.

3
window.name = "SomeWindowName"; 
window.open("www.microsoft.com", "SomeWindowName"); 

... fonctionne. Cela doit être utilisé dans la fenêtre de dialogue au lieu de location.replace

+0

Étonnamment, c'est effectivement le cas. Vous avez juste besoin de remplacer 'document.location = [url]' avec ces deux lignes. Cela fonctionne même pour rafraîchir. – Tacroy

Questions connexes