2009-06-13 5 views
4

i ont un problème d'ouverture popups javascript j'ai cette fonction pour ouvrir mes fenêtres pop-up dans IE6 et IE7:javascript popup issue Dans Internet Explorer!

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(); 

} 

il fonctionne. Je veux dire 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 le script courant sur cette page?

alors j'ai bouton événement onclick il est appellera une fonction pour fermer la fenêtre en cours d'actualiser la fonction d'ouverture est

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

il est me donne aussi l'erreur: window.opener.location est nulle ou non un objet, mais je suis sûr que je passe des 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> 

il me confondez vraiment. S'il vous plaît Aide;)

+0

Cela ressemble à un problème de bloqueur de popups. – Cerebrus

+0

mais il me donne toujours l'erreur S'il vous plaît consulter ce site www.pouran.net malheureusement ce site en langue persane et je ne pense pas que vous êtes à l'aise avec ça. donc si vous pouvez aller de l'avant et essayer d'ajouter quelque chose à votre panier, alors vous voyez le message d'erreur. réservoirs . – mehdi

+0

Eh bien, je n'ai pas compris un seul mot, mais je pense que j'ai réussi à trouver la page en question. J'ai aussi mangé pour ouvrir le popup et le fermer à partir du bouton à l'intérieur - après cela la page s'est rafraichie. Je n'ai pas remarqué d'erreurs. Tout semblait fonctionner très bien. Peut-être que c'est quelque chose dans votre ordinateur? L'avez-vous essayé chez quelqu'un d'autre? –

Répondre

6

Lorsque les fenêtres pop-up ouvert en utilisant window.open sont bloqués par un bloqueur de pop-up, une caractéristique de presque tout navigateur moderne ces jours-ci, la valeur de retour de window.open() n'est pas un objet fenêtre , mais null. Afin de contourner ces problèmes, vous devrez tester la valeur renvoyée par window.open() avant d'essayer d'invoquer des méthodes sur celui-ci.

Voici un morceau de code pour montrer comment aller 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 pop-up doivent être utilisés uniquement 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 bloqueur de fenêtres pop-up installé dans un navigateur donné. Dire à l'utilisateur comment autoriser les fenêtres contextuelles pour un site web donné n'est pas forcément une solution. Exemple: IE7 + barre d'outils Google = deux bloqueurs de fenêtres contextuelles.

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

Les avantages sont nombreux:

  1. skinnable, de sorte que vous pouvez créer un look plus cohérent pour correspondre à votre site Web.
  2. Pas de bloqueurs de popups.
  3. Bonne API et documentation cohérente pour la plupart des principaux navigateurs, sinon tous.

Si vous souhaitez toujours que la "fenêtre" nouvellement ouverte contienne une URL externe, vous pouvez utiliser un IFRAME dans la fenêtre de dialogue ouverte.

Espérons que cela aide,

Lior.

+1

+1 sur l'utilisation d'une boîte de dialogue jQuery modale. –

0

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

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

A côté de cela ...

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

Il serait également bon que vous ajoutiez un attribut href = "..." au lien avec la même URL que vous donnez à open_window. Ensuite, il deviendrait un vrai lien et vous n'auriez 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;"> ... 
+0

mais il me reste encore erreur S'il vous plaît Consultez ce site www.pouran.net malheureusement ce site en langue persane et je ne pense pas que vous êtes à l'aise avec cela. donc si vous pouvez aller de l'avant et essayer d'ajouter quelque chose à votre panier, alors vous voyez le message d'erreur. réservoirs . – mehdi

0

Voici un moyen d'avoir votre gâteau et le manger trop Je ne l'ai pas testé sur tous les navigateurs, mais il faut vraiment travailler

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 
} 

En utilisant le 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> 

qui sauve même vous le truc idiot de curseur car c'est un lien réel qui fonctionne même lorsque JS est éteint

Questions connexes