2009-05-13 6 views
1

J'ai développé une fonction qui, lorsqu'elle est appelée, devrait ouvrir une fenêtre mais elle renvoie null. Si je fais la fenêtre d'ouverture dans la fonction JavaScript d'origine cela fonctionne. Je suppose que c'est la fonction d'origine qui transmet le contrôle à l'autre fonction, mais pour une raison quelconque, cela ne fonctionne pas.javascript open.window renvoie null dans la fonction appelée

Voici ma fonction d'origine, cela appelle un nouveau fichier JavaScript et charge un fichier HTML et quand "Prêt" il doit afficher le fichier window.open avec le fichier HTML qui est maintenant sous forme de chaîne.

order.prototype.printMe = function() { 
    order_resume.loadthis("myTestPage.html", "showData"); 

    // OPENING WINDOW HERE WORKS; but the the html file that is loaded 
    // in above line hasn't finsihed loading - so i need to show it form 
    // the function below once in "ready" state 

/*  child1 = window.open ("about:blank","_blank"); 
     child1.document.write(myDocument); 
     child1.document.close(); 
*/  
} 

Et voici est ma fonction qui est appelée à partir de la fonction d'origine:

function showResume() { 
    this.req = false; 

    reservaResumen.prototype.showData = function() { 
     if (this.req.readyState == 4) { 
      child1 = window.open("about:blank", "_blank"); /// THIS RETURNS NULL 
      child1.document.write("test"); 
      child1.document.close(); 
     } 
    } 

    reservaResumen.prototype.loadthis = function(url, myMethod) { 
     if (window.XMLHttpRequest && !(window.ActiveXObject)) { 
      try { 
       this.req = new XMLHttpRequest(); 
      } 
      catch (e) { 
       this.req = false; 
      } 
     } 
     else if (window.ActiveXObject) { 
      try { 
       this.req = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       try { 
        this.req = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e) { 
        this.req = false; 
       } 
      } 
     } 
     if (this.req) { 
      var loader = this; 
      this.req.onreadystatechange = function() { 
       eval("loader." + myMethod + ".call(loader)") 
      } 
      this.req.open("GET", url, true); 
      this.req.send(""); 
     } 
    }​ 
+3

Un bloqueur de fenêtres contextuelles est-il activé? – epascarello

+0

non - car il l'ouvre dans la fonction d'origine .. –

+1

s'il vous plaît, vérifiez les paramètres du bloqueur de fenêtres contextuelles. Les navigateurs n'ouvriront pas les fenêtres sans interaction de l'utilisateur. Aussi, lorsque l'utilisateur fait par exemple. une action de clic, mais vous attendez longtemps (par exemple en faisant des opérations asynchrones comme les requêtes Ajax), les navigateurs bloquent aussi les fenêtres et retournent null pour window.open. – Rafael

Répondre

0

Voir this discussion thread qui attribue cette question au 32 bits IE8 navigateur fonctionnant sur 64 bits Windows 7.

Je viens a couru il y a quelques jours. Ma machine de développement a commencé à se comporter différemment, les fenêtres contextuelles ne fonctionnent plus sur de nombreux sites, y compris celui que je développe, et il n'y a pas de solution en vue. Je dois commencer IE en tant qu'administrateur, alors cela fonctionne. Désactiver le mode protégé ne résout pas cela. Le navigateur 64 bits n'a pas ce problème.

Pourquoi dans mon cas cela a juste commencé il ya quelques semaines je ne peux pas dire. Il y avait une mise à jour de sécurité le 9/16 qui, je pense, a provoqué le changement de comportement. C'est très étrange.

Questions connexes