javascript 将setTimeout与www.example.com()一起使用后,将setTimeout与window.close()一起使用不起作用window.open

nzrxty8p  于 2023-03-11  发布在  Java
关注(0)|答案(4)|浏览(154)

我有两个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,而不会执行另一个。任何建议和帮助都将不胜感激!

eblbsuwk

eblbsuwk1#

你最好使用相同参数的父窗口重新打开它:

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);
}

不是试IE,我没有它。

uxhixvfz

uxhixvfz2#

某些浏览器禁止您在加载网站后关闭窗口。
以下作品:

超文本标记语言:

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

脚本语言:

<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>

演示:

View demo
但是如果我们取消加载www.example.com的行的注解yahoo.com,它就不再起作用了:
View demo
"该怎么办"
你可以尝试使用一个黑客,像这样:

超文本标记语言:

<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);

});
vnzz0bqm

vnzz0bqm3#

经过一整天的尝试,我得到了一个解决方案。我的window.open出现在一些jQuery成功结果中,我首先认为这是因为我无法将myWindow变量从“成功”结果传播到主DOM。
事实上,这只是因为javascript不接受操作任何窗口,一旦一个新的内容已经加载(我的意思是URL)。但它仍然可以被黑客攻击,因为它似乎javascript只拒绝操作,如果有一个新的内容。所以,如果你重新加载你的窗口与完全相同的内容,然后它突然成为可操作的。
因此,在代码的某个地方(甚至在函数中),我打开了窗口(无论它在哪里),而不需要在var中设置它。

window.open('myURL','WindowName', "width=200, height=200");

然后当我决定关闭窗口时(不管是SetTimeOut还是其他触发器),我只需要用相同的URL和相同的名称重新加载窗口(这次使用var集),现在我就可以神奇地关闭它了。

var windo = window.open('myURL','WindowName', "width=200, height=200");
windo.close();

别问我为什么会成功。是的。
(我想这是因为它不是一个新窗口,也不是javascript的新内容,所以规则得到了尊重。)

xesrikrc

xesrikrc4#

我在Chrome上的JSFiddle中测试了这个。
超时实际上是在触发。问题是某些浏览器不允许你使用javascript关闭窗口。有一些bug阻止了它--特别是浏览器不允许一个网站的代码关闭另一个网站打开的窗口。请看下面的评论以获得更好的解释。
当我在Chrome中尝试这个方法时,setTimeout方法触发了,但是窗口没有关闭。我通过调用'alert'方法而不是news.window.close()方法来测试它。

相关问题