为了账号安全,请及时绑定邮箱和手机立即绑定

打开常量新标签

打开常量新标签

隔江千里 2023-04-27 16:09:48
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 个空白选项卡。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您的解决方案很棒,唯一的问题是除非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"

]);

我会让您注意进行必要的运行时类型检查,以防止使用错误的参数类型调用这些函数。


查看完整回答
反对 回复 2023-04-27
?
烙印99

TA贡献1829条经验 获得超13个赞

尝试这个


    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)


查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信