JS语句在Safari中执行,仅在新选项卡中执行,但不应该

时间:2017-12-04 16:45:17

标签: javascript

我有一个非常奇怪的问题,我无法解决这个问题,如果警报窗口在小于XY毫秒内关闭,下面的代码应该生成XMLHTTPRequest。

它适用于所有浏览器,并且在我访问时不会触发loadApi()函数,只是在Safari中它会被执行,无论我等待多长时间才能关闭警报。

但只有当我在Safari中打开一个新选项卡然后访问该页面时才会发生这种情况,如果我在同一个选项卡中再次访问同一页面,则代码无法执行。

var a = window.performance.now();
    alert('yo yo yo');
var b = window.performance.now();


if ((b - a) < 80) {
    console.log('yes');
    loadApi(); // this makes the XMLHTTPRequest which triggers a DB insert
}

在Safari中,当我访问一个新的选项卡时代码被执行并执行XMLHTTPRequest,它甚至更奇怪了,但是console.log()永远不会触发。控制台只显示为空。

这是Safari的错误,还是我做错了什么?

请帮助:)

1 个答案:

答案 0 :(得分:0)

好的,我想通了,问题是Safaris警报/提示等现在已经不再阻止浏览器了。

因此,即使在发出警报之后,JS似乎仍会继续执行。

解决方案是启动计数器,触发警报,然后将其余代码包装在setTimeout中,延迟时间非常短,我用了5ms。

修复了它