我有两个setTimeout,一个用于打开窗口中的网页,另一个用于在预定时间后关闭窗口。但是,在使用setTimeout打开网页后,下一个关闭窗口的setTimeout不起作用。setTimeout与windows.close本身工作正常。
我试着打开一扇窗,上面写着一条信息;然后在窗口中打开一个网站,在一段预定的时间之后,然后在几秒钟之后关闭窗口。下面是我的函数:
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);
}
我试着在Chrome和IE上运行,两个浏览器都只会执行其中一个setTimeout,而不会执行另一个。任何建议和帮助都将不胜感激!
4条答案
按热度按时间eblbsuwk1#
你最好使用相同参数的父窗口重新打开它:
不是试IE,我没有它。
uxhixvfz2#
某些浏览器禁止您在加载网站后关闭窗口。
以下作品:
超文本标记语言:
脚本语言:
演示:
View demo
但是如果我们取消加载www.example.com的行的注解yahoo.com,它就不再起作用了:
View demo
"该怎么办"
你可以尝试使用一个黑客,像这样:
超文本标记语言:
jQuery:
vnzz0bqm3#
经过一整天的尝试,我得到了一个解决方案。我的window.open出现在一些jQuery成功结果中,我首先认为这是因为我无法将myWindow变量从“成功”结果传播到主DOM。
事实上,这只是因为javascript不接受操作任何窗口,一旦一个新的内容已经加载(我的意思是URL)。但它仍然可以被黑客攻击,因为它似乎javascript只拒绝操作,如果有一个新的内容。所以,如果你重新加载你的窗口与完全相同的内容,然后它突然成为可操作的。
因此,在代码的某个地方(甚至在函数中),我打开了窗口(无论它在哪里),而不需要在var中设置它。
然后当我决定关闭窗口时(不管是SetTimeOut还是其他触发器),我只需要用相同的URL和相同的名称重新加载窗口(这次使用var集),现在我就可以神奇地关闭它了。
别问我为什么会成功。是的。
(我想这是因为它不是一个新窗口,也不是javascript的新内容,所以规则得到了尊重。)
xesrikrc4#
我在Chrome上的JSFiddle中测试了这个。
超时实际上是在触发。问题是某些浏览器不允许你使用javascript关闭窗口。有一些bug阻止了它--特别是浏览器不允许一个网站的代码关闭另一个网站打开的窗口。请看下面的评论以获得更好的解释。
当我在Chrome中尝试这个方法时,setTimeout方法触发了,但是窗口没有关闭。我通过调用'alert'方法而不是news.window.close()方法来测试它。