Javascript 在Mobile Safari上设置window.location在setTimeout内
在setTimeout内,我正在设置新打开窗口的位置。要执行此操作,将使用临时本地URL打开窗口,然后将位置更改为目标URL。这在包括Safari在内的所有桌面浏览器上都能正常工作 但是,在Mobile Safari中,新窗口的位置不会更新,直到用户将焦点返回到原始窗口,即临时页面留在那里 以下是JavaScript/jQuery的相关部分: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(
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是的,正是这样。我尝试了你的测试,它报告了我返回原始窗口的时间。我会在某个地方公开发布一个测试页面。显然,这是一个