问题
- 问题有两个
- 在用户触发的浏览器事件中,异步的使用window.open开启一个新的tab失败
- 在用户触发的浏览器事件中,异步的使用js代码调用form表单的提交function失败
解决问题1
- 由于safari不能接受异步的window.open,那么我们首先同步的window.open一个空白的tab,然后获取新tab的window对象的引用(window.open()的返回值就是新tab window对象的引用)
- 处理异步事件
- 处理完之后将想要跳转的url赋值给新tab的window.location.href给出想要跳转的新数值即可
const newTab = window.open('')
setTimeout(() => {
newTab.location.href = 'http://www.baidu.com'
}, 3000)
补充知识
解决问题2
- 早就知道大家都采用同步打开新tab,异步给tab赋url的方式解决safari的这个问题
- 但是发现自己的情况是要做到表单提交而表单提交打开新的tab并不是又我自己来做的,因此我也不能够控制他同步打开然后异步赋值
- 直到发现window.open有第二个参数
- 因此依旧是同步的打开一个tab
window.open('','newPay')
但是一定要给第二个参数值
- 然后将form标签的target属性值设置为
window.open('','newPay')
的第二个参数。就可以在同步打开的tab中load form submit的结果
网友评论