如何检查位置更改是否排队?

时间:2014-10-22 12:48:58

标签: javascript safari onbeforeunload

因为safari在如何执行位置更改方面非常奇怪,我在正确运行某些功能时遇到了一些问题。发生这种情况:

myFunc
   location.href = stuff
   setTimeout(myFunc2,0)

//here i would expect the beforeunload event, instead i get:
myFunc2
beforeunload

现在的问题是,我根本不希望调用myFunc2,因为它在实际位置更改后排队到堆栈中。我也试过这样的事情:

var prevLoc = location.href;
function myFunc(){
    location.href = stuff;
    setTimeout(myFunc2, 0);
}
function myFunc2(){
    if(location.href == prevLoc) return;
    //...
}

也不起作用,因为location.href不是stuff,而是当前页面的位置。

defineProperty,prototypechanges和其他实现都没有选项,因为无法重新定义location.href,可能是因为window.location = something的奇怪功能

也许是一个更简单的例子,比如我想跟踪回调所需的时间,但是如果它改变了页面(我会在下一页关闭它),那就不是了。

var funcStarted = 0;
function startFunc(){
    funcStarted = Date.now();
    theFunc()
    setTimeout(endFunc, 0);
}
function theFunc(){
    window.location = "http://www.example.com";
}
//this correctly isn't executed in all browsers, except safari
function endFunc(){
    console.log("time: " + (Date.now() - funcStarted));
}

底线: 我需要一些东西来检测是否已触发位置更改,但是onbeforeunload函数为时已晚。

0 个答案:

没有答案