2010-07-20 19 views
0

Je ne connais pas exactement la cause de ce symptôme mais voilà. Dans notre application Web, nous appelons window.open pour ouvrir une nouvelle fenêtre/onglet (en interne tout le monde est configuré pour ouvrir dans un nouvel onglet). Après l'ouverture de ce nouvel onglet, IE8 y met immédiatement le focus.window.open et .Net WebServices

Nous avons ensuite intégré un service Web, nous appelons donc ce service Web qui appelle à son tour une fonction javascript de rappel lors de son retour. Nous appelons maintenant window.open à l'intérieur de la fonction de rappel. Lorsque nous faisons cela, IE8 ouvre le nouvel onglet mais ne change pas le focus. Appelle à window.focus sur la page parente et la page enfant ne fait rien.

Maintenant, je sais que javascript n'est pas threadé, mais est-ce quelque chose à voir avec l'asynchronicité? Existe-t-il un moyen de faire en sorte que le navigateur se comporte comme prévu?

Répondre

2

Je crois que par défaut, IE ne passera le focus sur le nouvel onglet que s'il a été ouvert à la suite d'une action initiée par l'utilisateur comme un clic. Si l'appel window.open ne répond pas à une action de l'interface utilisateur, IE ouvre probablement l'onglet en arrière-plan comme s'il s'agissait d'une sorte de fenêtre contextuelle, bien que le bloqueur de fenêtres contextuelles ne soit évidemment pas bloqué.

Si vous êtes dans un environnement intranet et que vous pouvez spécifier des paramètres, avez-vous essayé de définir la case à cocher "Toujours passer aux nouveaux onglets lorsqu'ils sont créés" dans la boîte de dialogue des paramètres de navigation par onglets?

+0

* slap frontale * C'est parfaitement logique. Nous ferons cela. Juste par intérêt, pensez-vous remplir l'objet 'event' du navigateur pourrait modifier le comportement? Peut-être que cela pourrait tromper le navigateur. – Anthony

+0

Je doute que cette solution de contournement aurait un effet. IE vérifie presque certainement ce scénario dans le code du navigateur chrome lui-même, pas le DOM. – Josh