Problème popup javascript Dans Internet Explorer!

J'ai un problème avec l'ouverture des fenêtres pop-up dans javascript J'ai cette fonction pour ouvrir mes popups dans IE6 et IE7:

function open_window(Location,w,h) //opens new window { var win = "width="+w+",height="+h+",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; alert(win) ; window.open(Location,'newWin',win).focus(); } 

ça marche . Je veux dire que ma nouvelle fenêtre s'ouvre, mais une erreur se produit. Le message d'erreur est:

'Window.open (…)' est null n'est pas un objet.
Voulez-vous compter sur l'exécution du script sur cette page?

Alors j'ai un bouton dans l'événement onclick, il appellera une fonction pour fermer la fenêtre actuelle et une actualisation de la fonction d'ouvreur.

 function refreshParent(location) { window.opener.location.href = location ; window.close(); } 

Il me donne également une erreur: window.opener.location est nul ou pas un objet, mais je suis sûr que je passe les paramètres corrects

Je l'appelle comme ceci:

Pour la deuxième partie:

 <input type="button" name="pay" value="test" onclick="refreshParent('index.php?module=payment&task=default')" > 

Pour la première partie

 <a onclick="javascript:open_window('?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on','500' , '500')" style="cursor:pointer" id="addtocard"> <img src="../images/new_theme/buy_book.gif" width="123" border="0"/> </a> 

C'est vraiment confus moi. Aidez-nous;)

Lorsque les fenêtres contextuelles ouvertes à l'aide de window.open sont bloquées par un bloqueur de fenêtres contextuelles, une fonctionnalité à peu près n'importe quel navigateur moderne ces jours-ci, la valeur de retour de window.open () n'est pas un objet de fenêtre, mais null.

Afin de contourner ces problèmes, vous devriez tester la valeur retournée par window.open () avant d'essayer d'invoquer les méthodes.

Voici un code pour démontrer comment contourner ce problème:

 function open_window(Location,w,h) //opens new window { var options = "width=" + w + ",height=" + h; options += ",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; var newwin = window.open(Location,'newWin',options); if (newwin == null) { // The popup got blocked, notify the user return false; } newwin.focus(); } 

En général, les fenêtres contextuelles ne doivent être utilisées qu'en dernier recours ou dans des environnements contrôlés (site web interne de l'entreprise, etc.). Les bloqueurs de fenêtres contextuelles ont tendance à se comporter de manière très incohérente et il peut y avoir plus d'un seul bloqueur de fenêtres pop-up installé dans un navigateur donné, afin d'informer l'utilisateur sur la façon d'autoriser les fenêtres contextuelles pour un site Web donné n'est pas forcément une solution. Exemple: IE7 + Google toolbar = deux bloqueurs de fenêtres contextuelles.

Si je peux suggérer, peut-être devriez-vous envisager d'utiliser quelque chose comme ceci: http://jqueryui.com/demos/dialog/

Les avantages sont nombreux:

  1. Skinnable, donc vous pouvez créer un look plus cohérent pour faire correspondre votre site.
  2. Aucun bloqueur de popup.
  3. Bonne API et documentation cohérente dans la plupart des navigateurs majeurs, sinon tous.

Si vous avez encore besoin que la "fenêtre" nouvellement ouverte contienne une URL externe, vous pouvez utiliser un IFRAME dans la boîte de dialogue ouverte.

J'espère que cela t'aides,

Lior.

Fonctionne parfaitement pour moi. Testé dans IE6 / 7/8.

Bien sûr, je ne pouvais pas le tester avec vos URL, donc je les ai remplacées par des noms de fichiers simples. Je vous suggère de l'essayer également avec des noms de fichiers simples et de voir si cela échoue alors.

À côté de ça…

Vous n'avez pas besoin d'ajouter "javascript:" au début de la valeur d'attribut onclick.

Il serait également bon si vous avez ajouté un attribut href = "…" au lien avec la même URL que vous donnez à open_window. Ensuite, il deviendrait un véritable lien et vous ne devriez pas ajouter de curseur: pointeur vers lui. Par exemple:

 <a href="?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on" onclick="open_window(this.href, '500' , '500'); return false;"> ... 

Voici un moyen d'avoir votre gâteau et de le manger aussi. Je ne l'ai pas testé sur tous les navigateurs, mais cela devrait vraiment fonctionner

 function open_window(url,target,w,h) { //opens new window var parms = "width="+w+",height="+h+",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; var win = window.open(url,target,parms); if (win) { win.focus(); return false; // cancel the onClick } return true; // make the link perform as normal } 

Utilisation du lien

 <a href="?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on" target="newWin" onclick="return open_window(this.href,this.target,500,500)" id="addtocard"><img src="../images/new_theme/buy_book.gif" width="123" border="0"/></a> 

Ce qui vous épargne même le curseur du curseur car il s'agit d'un lien réel qui fonctionne même lorsque JS est désactivé