javascript - OPENING 常量 新标签
问题描述
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 个空白标签。
解决方案
您的解决方案很棒,唯一的问题是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"
]);
我将让您负责进行必要的运行时类型检查,以防止使用错误的参数类型调用这些函数。
这是上述代码在真实环境中的演示。
如果您对代码片段中使用的概念不够熟悉,可以查看此处和此处的文档。
注意:小心浏览器!由于您可能会打开许多浏览器选项卡,因此浏览器可能会阻止您的脚本,除非用户明确告诉它忽略多个打开的弹出窗口!
推荐阅读
- python - 如何以 Pythonic 方式向上移动 n 个目录?
- c - 在 C 中以增量方式读取和写入长数据类型时出错
- cakephp - 在 Apache 上的 https 上的 Mod 重写不起作用
- http-get - KotlinJs - 没有动态类型功能的简单 HTTP GET
- c - 从用户态程序读取内核堆栈
- json - 如何在弹性搜索中存储星型数据库
- oracle-apex - 如何修复 Oracle Apex 18.2 中的 Textarea 字段帮助文本(?)位置?
- c# - 在 Visual Studio 2017 安装项目中将 .NET Core 添加到先决条件
- charts - 付费图表未显示在 PDF 中
- java - 自定义属性文件在较低的项目层中读取为实体