就像其他帖子提到的那样,最好的方法是先打开窗口,然后在回调或异步函数之后设置它的位置
<input type="button" value="Open" onclick="cb1()">
<script type="text/javascript">
function cb1() {
var w = window.open('', 'w2');
setTimeout(function () {
wo(w);
}, 1000); //simple async
}
function wo(w)
{
w.location = "http://google.com";
w.focus();
}
</script>
或者,如果您使用的是 async await,您也会遇到同样的问题。同样的解决方案仍然适用。
public async openWindow(): Promise<void> {
const w = window.open('', '_blank');
const url = await getUrlAsync();
w.location = url;
}
进一步的增强是在初始页面上打开窗口,通过加载 url 或向该页面写入一些 html 来提供一些快速反馈
public async openWindow(): Promise<void> {
const w = window.open('', '_blank');
w.document.write("<html><head></head><body>Please wait while we redirect you</body></html>");
w.document.close();
const url = await getUrlAsync();
w.location = url;
}
这将防止用户在解析您的 URL 所需的时间内查看空白选项卡/窗口。