Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Mobile Safari上设置window.location在setTimeout内_Javascript_Jquery_Window_Mobile Safari_Settimeout - Fatal编程技术网

Javascript 在Mobile Safari上设置window.location在setTimeout内

Javascript 在Mobile Safari上设置window.location在setTimeout内,javascript,jquery,window,mobile-safari,settimeout,Javascript,Jquery,Window,Mobile Safari,Settimeout,在setTimeout内,我正在设置新打开窗口的位置。要执行此操作,将使用临时本地URL打开窗口,然后将位置更改为目标URL。这在包括Safari在内的所有桌面浏览器上都能正常工作 但是,在Mobile Safari中,新窗口的位置不会更新,直到用户将焦点返回到原始窗口,即临时页面留在那里 以下是JavaScript/jQuery的相关部分: var self = $(this); if (self.is("a")) { var clickEventHandler = function(

在setTimeout内,我正在设置新打开窗口的位置。要执行此操作,将使用临时本地URL打开窗口,然后将位置更改为目标URL。这在包括Safari在内的所有桌面浏览器上都能正常工作

但是,在Mobile Safari中,新窗口的位置不会更新,直到用户将焦点返回到原始窗口,即临时页面留在那里

以下是JavaScript/jQuery的相关部分:

var self = $(this);
if (self.is("a")) {
    var clickEventHandler = function(event) {
        event.preventDefault();
        if (self.attr("target")) {
            var newWindow = window.open('loading.htm',self.attr("target"));
            var externalURL=self.attr("href");
            setTimeout( function() { newWindow.location=externalURL; }, 100 );
        }
    }
    $(this).bind("click", eventHandler);
}

为什么需要在
setTimeout
内执行此操作?我猜mobile Safari会延迟
setTiemout
直到返回焦点。在
setTimeout
中执行
document.body.innerHTML+=new Date().toLocalString()
会发生什么?当你从另一个窗口返回时,它会报告什么时候?@Michael Mior这种方法是必要的,因为我正在Google Analytics中跟踪事件,如果不引入短暂的延迟,这将无法工作,@apsillers是的,正是这样。我尝试了你的测试,它报告了我返回原始窗口的时间。我会在某个地方公开发布一个测试页面。显然,这是一个