打开常量新标签

var myWindow;

let urls = ["https://stackoverflow.com", "https://stackexchange.com/"];

let counter = 0;

let openWindow;

function openWin(url) {

    openWindow = window.open(url, "_blank");

}

function closeWin(){

    openWindow.close();

}

setInterval(function(){

    if(openWindow) closeWin();

    openWin(urls[counter]);

    counter++;

}, 10000)

即使在打开所有网址后,这也会继续打开新标签页。如何防止打开任何其他选项卡然后只打开 url。当我加载此网址时,它会打开 4 个网址,但之后会打开 N 个空白选项卡。


隔江千里
浏览 104回答 2
2回答

米脂

您的解决方案很棒,唯一的问题是除非setInterval您取消呼叫,否则呼叫将永远无法完成。这个解决方案的问题是它涉及一些副作用,以后调试起来会很乏味。我可以提出一个涉及较少副作用并利用一些新概念(例如 Promises 和 Async/Await 上下文)的解决方案。"use strict";function sleep(seconds) {    return new Promise(function(resolve) {        window.setTimeout(resolve, seconds * 1000);    });}async function openAndCloseAfter(seconds, url) {    const openWindow = window.open(url, "_blank");    await sleep(seconds);    openWindow.close();}async function openAll(urls) {    for (const url of urls) {        await openAndCloseAfter(10, url);    }}openAll([    "https://stackoverflow.com",    "https://stackexchange.com"]);我会让您注意进行必要的运行时类型检查,以防止使用错误的参数类型调用这些函数。

烙印99

尝试这个    var myWindow;    let urls = ["https://stackoverflow.com", "https://stackexchange.com/"];    let counter = 0;    let openWindow;    function openWin(url) {        openWindow = window.open(url, "_blank");    }    function closeWin(){        openWindow.close();    }    setInterval(function(){        if(openWindow) closeWin();        if((counter) == urls.length) return        openWin(urls[counter]);        counter++;    }, 1000)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript