Safari window.open
无法打开窗口
原因:会拦截异步函数中的window.open
axios.get("/api").then(res=> {
window.open(res.url); // 异步函数中会拦截
})
解决办法
- mac 上Safari 有效, ios手机上无效
const windowOpen = (function () {
const a = document.createElement("a")
a.target = '_blank'
document.body.appendChild(a)
// 返回一个闭包函数,为了优化每次调用不会多次创建a标签
return function (url) {
a.href = url
a.click()
}
})()
// 调用
windowOpen("https://blog.xrdev.top")
- 提前打开
window.open
const newWindow = window.open("", "_blank")
axios.get("/api").then(res=> {
newWindow.location.href = res.url
// 这种方法如果需要关闭页面的话,会导致闪屏
newWindow.close() // 因为页面打开了,回调执行到这里( 有了一段时间)这时关闭,就会出现闪了一下的效果
})
- 在页面或者数据初始化的时候就把真实的url 获取到,然后直接用
window.open
打开
评论区