Javascript: utiliser setTimeout avec window.close () ne fonctionne pas après avoir utilisé setTimeout avec window.open ()

J'ai deux setTimeout après l'autre. L'une pour ouvrir une page Web dans la fenêtre et une autre pour fermer la fenêtre après une période de temps prédéterminée. Cependant, après avoir utilisé setTimeout pour ouvrir une page Web, le prochain setTimeout qui ferme la fenêtre ne fonctionne pas. Le setTimeout avec windows.close fonctionne bien.

Je tente d'ouvrir une fenêtre avec un message; Puis ouvrez un site Web dans la fenêtre après une période de temps prédéterminée, puis fermez la fenêtre après quelques secondes de plus. Voici ma fonction de faire ceci:

function showNews() { news = window.open("", "NewsWindow", "width=900, height=700"); news.document.write("<p>The 'NewsWindow' will only appearing for 3 seconds.</p>"); tmot = setTimeout(function(){news.window.open('http://www.yahoo.com','_self')}, 2000); tmot = setTimeout(function(){news.window.close()}, 5000); } 

J'ai essayé de fonctionner sur Chrome et IE et les deux navigateurs n'exécuteraient l'un des setTimeout et pas l'autre. Tout conseil et aide seront grandement appréciés!

Vous allez mieux rouvrir à l'aide de la fenêtre parent avec les mêmes paramètres:

 function showNews() { news = window.open("", "NewsWindow", "width=900, height=700"); news.document.write("<p>The 'NewsWindow' will only appearing for 3 seconds.</p>"); tmot = setTimeout(function(){window.open('http://www.yahoo.com', "NewsWindow")},2000); tmot = setTimeout(function(){news.close()}, 5000); } 

Ne pas essayer IE, je ne l'ai pas.

J'ai testé ceci dans JSFiddle sur Chrome.

Le délai d'attente est, en fait, le licenciement. Le problème est que certains navigateurs ne vous permettent pas de fermer une fenêtre à l'aide de javascript. Il y a des bogues qui l'empêchent – en particulier que le navigateur ne laisse pas le code d'un site Web fermer une fenêtre ouverte sur un site Web différent. Voir le commentaire ci-dessous pour une meilleure explication.

Lorsque j'ai essayé ceci dans Chrome, la méthode setTimeout a été lancée, mais la fenêtre n'a pas fermé. Je l'ai testé en appelant la méthode 'Alerte' plutôt que la méthode news.window.close ().

Certains navigateurs vous interdisent de fermer la fenêtre une fois qu'il charge un site Web.

Les travaux suivants:

HTML:

 <button onclick="showNews()">Show News</button> 

JavaScript:

 <script> var myWindow; function showNews() { myWindow = window.open("","myWindow","width=200,height=100"); myWindow.document.write("<p>This is 'myWindow'</p>"); //tmot = setTimeout(function(){myWindow.open('http://www.yahoo.com','_self')}, 2000); tmot = setTimeout(function(){myWindow.close();}, 5000); } </script> 

DEMO:

Afficher la démonstration

Mais si nous décommentons la ligne où nous chargeons yahoo.com, cela ne fonctionne plus:

Afficher la démonstration


Que faire?

Vous pourriez essayer d'utiliser un hack, quelque chose comme ceci:

HTML:

 <button type="button" id="show-news">Show News</button> 

JQuery:

 $("#show-news").click(function() { myWindow = window.open('','myWindow', "width=200, height=200"); setTimeout(function() { myWindow.window.open("http://www.w3schools.com/", "_self"); }, 2000); setTimeout(function() { myWindow.window.open('', '_self', ''); myWindow.window.close(); }, 5000); });