【发布时间】:2020-04-01 17:59:16
【问题描述】:
我知道 Safari 在 ajax 调用期间尝试通过 window.open() 阻止打开新标签。 我们需要在 ajax 调用之前调用 window.open() 来打开一个新标签,这样程序就可以防止 Safari 的阻塞。 以上参考,window.open(url, '_blank'); not working on iMac/Safari。
但是,如果我想使用来自 ajax 调用的信息来验证我是否需要打开一个新选项卡,即有条件地打开一个新选项卡取决于 ajax 调用的验证,该怎么办?
然后我无法在 ajax 调用之前打开新标签页。这是因为如果验证未通过,那么我需要关闭在 ajax 调用之前打开的选项卡...,这不是我想要的程序的行为。
如果信息是通过 ajax 调用验证的,我如何才能打开一个新选项卡?谢谢大家的回答!
let newTab = window.open();
someAjaxChecking(...).then((isValid)=>{
// isValid is a return boolean from the ajax calling someAjaxChecking() to
// determine whether redirect the new tab or close it
if(isValid){
newTab.location = url;
}else{
newTab.close(); // ***it is not desire to open and close the new tab...
}
})
真实案例:
- 我需要向我的后端发送一个表单(一组数据)来验证表单(一个 AJAX 调用);
- 然后它会返回一个布尔值(isValid)来判断表单是否有效;
- 如果 boolean(isValid) 为真,它将打开一个新选项卡
【问题讨论】:
标签: javascript html ajax safari window.open