16 votes

Sur IE9, Win 7 window.open() renvoie null au lieu de la référence de la fenêtre ouverte

J'essaie quelque chose comme ci-dessous,

var myWindow = null;
if(!myWindow || myWindow.closed)
{
    myWindow = window.open(url, windowId);
}
else 
{
    myWindow.focus();   
}

Tous les navigateurs renvoient le ref de la fenêtre pour window.open(), mais IE 9 renvoie NULL. Quelqu'un a-t-il plus d'informations sur la raison pour laquelle NULL est renvoyé ou éventuellement une solution de contournement pour IE9 ?

28voto

srayker Points 449

window.open renvoie un objet de référence NULL si Activer le mode protégé est vérifié sous Options Internet->Sécurité->Niveau de sécurité pour cette zone et la ZONE est différente, c'est-à-dire que dans mon cas, un fichier local ouvre une fenêtre popup de l'Intranet.

window.open renvoie un objet de référence même si Activer le mode protégé est vérifié lorsque mysite.com ouvre someothersite.com dans une fenêtre popup, c'est-à-dire Internet->Internet

5voto

OverZealous Points 14115

Par curiosité, quel est votre windowId ? Y a-t-il un espace ?

Parce que, Apparemment, IE9 échoue s'il y a un espace dans le titre de la fenêtre. .

2voto

GB Patil Points 166

En fait, dans mon cas, j'obtenais la référence null de window.open si j'ouvrais l'URL de l'hôte local ou du site intranet. Si ma popup contient l'URL d'un site internet, j'obtiens l'objet window in reference. J'ai fait ce qui suit pour résoudre ce problème :

  • Ouvrez IE > Outils > Options Internet
  • Allez dans l'onglet Sécurité
  • Activez le mode protégé en cliquant sur la case à cocher.
  • Redémarrer IE

Maintenant, il a commencé à me donner la référence de l'objet fenêtre pour la fenêtre popup ouverte avec les sites Intranet.

Il peut également s'agir d'un problème d'URL sécurisée ou ajoutée dans la zone des sites de confiance. Si vous pouvez fournir l'URL, cela nous aidera.

J'espère que cela vous aidera.

0voto

brightDot Points 144

Nous avons eu ce problème avec notre application. Nous utilisons des téléchargements externes en utilisant Dropbox et cela ne fonctionnait pas.

C'est comme ça qu'on l'a réparé. Résumant les différentes lectures et solutions. Veuillez me faire savoir si une partie n'est pas correcte ou n'a pas de sens.

Root Cause:

À partir d'IE11, Windows a commencé à attribuer les niveaux de sécurité aux applications au moment du démarrage. Une fenêtre à faible niveau de sécurité et une fenêtre à haut niveau de sécurité. Toujours à partir d'IE11, lorsqu'un nouveau popup s'ouvre, il ne s'agit pas d'une sous-fenêtre de la fenêtre principale du navigateur. Il s'agit plutôt d'une toute nouvelle instance d'IE11 à laquelle est attribué un niveau de sécurité différent. En général, le mécanisme de téléchargement externe fonctionne en utilisant la fonction de messagerie inter-fenêtres de JavaScript. Si cela ne fonctionne pas, les téléchargements externes ne fonctionnent pas. Conformément aux normes de sécurité de Windows, une fenêtre à faible niveau de sécurité ne peut pas envoyer de message à une fenêtre à haut niveau de sécurité. Si l'on prend un peu de recul et que l'on regarde nos machines Windows, on constate qu'elles sont livrées par notre équipe interne. Par défaut, toutes les applications web de notre domaine sont ajoutées aux sites de confiance sur nos machines Windows. Mais les liens de téléchargement externes comme Dropbox ne sont pas ajoutés aux sites de confiance. Ainsi, lorsque vous ouvrez notre application dans IE11, Windows marque automatiquement la fenêtre IE11 comme une fenêtre de haute sécurité. Maintenant, lorsque vous essayez de télécharger un fichier de conception via Dropbox parce que Dropbox n'est pas un site de confiance, le nouveau popup qui est créé est une nouvelle instance d'IE11 avec un niveau de sécurité faible. De ce fait, après l'ouverture de la fenêtre Dropbox, celle-ci perd la connexion avec la fenêtre parente, à savoir Our App. C'est la cause du problème avec les téléchargements externes.

Fix :

  1. Vous pouvez soit ajouter les sites yoursite.com et dropbox.com aux sites de confiance dans IE11 via Options Internet > Sécurité > Sites de confiance, soit les supprimer tous les deux.

  2. Activez le mode protégé dans IE11 en cochant la case Activer le mode protégé dans IE11 via Options Internet > Sécurité > Activer le mode protégé, puis redémarrez le navigateur.

Cela signifie qu'il ne s'agit pas d'un problème réel pour nos clients. Si cela ne fonctionne pas pour eux, cela est dû à la raison suivante : l'un des sites est ajouté à la liste des sites de confiance, mais pas les deux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X