2009-11-17 8 views
3

Je suis en train de lancer une fenêtre pop-up d'une fonction Javascript et assurer qu'il a mise au point avec l'appel suivant:Donner un foyer de fenêtre enfant dans IE8

window.open(popupUrl, popupName, "...").focus();

Il fonctionne dans tous les autres navigateurs, mais IE8 laisse la nouvelle fenêtre en arrière-plan avec la notification de barre des tâches orange clignotante. Apparemment, cela est une caractéristique de IE8:

http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx

Il dit que je devrais être en mesure de se concentrer la fenêtre en faisant un appel focus() provenant de la nouvelle page, mais cela ne semble pas fonctionner soit . J'ai essayé d'insérer window.focus() dans les balises de script dans la page et l'onload du corps mais cela n'a aucun effet. Y a-t-il quelque chose qui me manque pour faire un appel à focus() au chargement de la page, ou une autre façon de lancer un popup que IE8 ne cachera pas?

Répondre

0

je me suis dit ce que la question était - la raison se runn La fonction window.focus() de l'onload ne fonctionnait pas parce que le premier appel de window.open(). focus() le faisait clignoter en arrière-plan, et que les appels de focus suivants ne fonctionnaient plus. Si je n'essaie pas de me concentrer à partir de la fenêtre d'appel, mais seulement à partir de la fenêtre contextuelle, elle arrive normalement à l'avant. Quel ennuyeux « fonctionnalité » ...

0

Vous pourriez essayer. Je ne sais pas si cela fonctionnera bien>

var isIE = (navigator.appName == "Microsoft Internet Explorer"); 
var hasFocus = true; 
var active_element; 

function setFocusEvents() { 
    active_element = document.activeElement; 
    if (isIE) { 
     document.onfocusout = function() { onWindowBlur();  } 
     document.onfocusin = function() { onWindowFocus();  } 
    } else { 
     window.onblur = function() { onWindowBlur();   } 
     window.onfocus = function() { onWindowFocus();  } 
    } 
} 

function onWindowFocus() { 
    hasFocus = true; 
} 

function onWindowBlur() { 
    if (active_element != document.activeElement) { 
     active_element = document.activeElement; 
     return; 
    } 
    hasFocus = false; 
} 
0

Oui, je ne peux pas tester cela sur IE8 au moment ou l'autre, mais un jeu avec cette méthode document.ready au lieu du body.onload:

test1 .html:

<html> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
      function openNewWindow() 
      { 
       window.open("test2.html", null, "height=200, width=200"); 
      } 
     </script> 
    </head> 
    <body>       
     <a onclick="openNewWindow()">Open</a> 
    </body> 
</html> 

test2.html:

<html> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function(){ window.focus(); }); 
     </script> 
    </head> 
    <body> 
     <div id="container" style="background:blue;height:200px;width:300px"> 
     </div> 
    </body> 
</html> 
1

Le IE8 ne permet pas cette fonction en raison de problèmes de sécurité

Windows Internet Explorer 8 et versions ultérieures. La méthode de mise au point n'amène plus les fenêtres enfants (telles que celles créées avec la méthode ouverte) au premier plan. Les fenêtres enfants demandent désormais l'attention à l'utilisateur, généralement en faisant clignoter la barre de titre. Pour amener directement la fenêtre au premier plan, ajouter un script à la fenêtre de l'enfant qui appelle la méthode de mise au point de son objet fenêtre

http://msdn.microsoft.com/en-us/library/ms536425%28VS.85%29.aspx

0

Le problème est la méthode Window.focus ne fonctionne pas dans Internet Explorer 8 (IE 8) . Ce n'est pas un bloqueur de pop-up ou des paramètres dans IE 8 ou supérieur; C'est en raison d'une certaine sécurité que je crois pour arrêter les pop-ups ennuyeux étant ramené au sommet.

après beaucoup de cheveux tirant et googler je l'ai trouvé ce qui suit:

Microsoft suggère des mises à jour, mais cela ne semble pas fonctionner, plus la façon dont ils ne me attendre sérieusement de demander à tous les utilisateurs mon site mettre à jour leurs machines!

alors je suis venu avec ce travail ou corriger.

Ce que je fais avec la fenêtre est:

  1. premier je vérifie si la fenêtre est ouverte
  2. si elle est ouverte, fermez-le
  3. ouvrir une nouvelle nouvelle version de la fenêtre sur le dessus.

code javascript pour inclure à en-tête ou dans un fichier séparé:

function nameoflink() 
{ 
    var nameofwindow = window.open('pagetolinkto.htm','nameofwindow','menubar=1,resizable=1,width=350,height=250'); 
    if (nameofwindow) { 
     nameofwindow.close(); 
    } 
    window.open('pagetolinkto.htm','nameofwindow,'menubar=1,resizable=1,width=350,height=250'); 
    return false; 
} 

lien sur la page:

<a href="#" onclick="nameoflink()">Click Here to go to name of link</a> 

testé dans MS Windows 7 avec IE8 pas sûr de la version exacte.

Questions connexes