Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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 Safari不让函数在页面卸载之前完成? 函数日志(名称、值) { push({'name':name,'value':value}); } 函数flush() { 对于(i=0;i_Javascript_Dom_Safari_Osx Snow Leopard - Fatal编程技术网

Javascript Safari不让函数在页面卸载之前完成? 函数日志(名称、值) { push({'name':name,'value':value}); } 函数flush() { 对于(i=0;i

Javascript Safari不让函数在页面卸载之前完成? 函数日志(名称、值) { push({'name':name,'value':value}); } 函数flush() { 对于(i=0;i,javascript,dom,safari,osx-snow-leopard,Javascript,Dom,Safari,Osx Snow Leopard,我正在编写一些跟踪用户交互的代码,以查找页面上的热点。大部分已经完成了,并且可以在大多数浏览器上运行,但我目前在Safari 5.0.5/Mac 10.6上遇到了难题(顺便说一句,它也可以在Windows XP上通过Safari 5.0.1进行复制)。给我带来困难的部分是页面传输过程中的链接点击。例如,下面的代码将我带到someotherpage.html: function log(name, value) { mylog.push({'name':name, 'value':valu

我正在编写一些跟踪用户交互的代码,以查找页面上的热点。大部分已经完成了,并且可以在大多数浏览器上运行,但我目前在Safari 5.0.5/Mac 10.6上遇到了难题(顺便说一句,它也可以在Windows XP上通过Safari 5.0.1进行复制)。给我带来困难的部分是页面传输过程中的链接点击。例如,下面的代码将我带到someotherpage.html:

function log(name, value)
{
    mylog.push({'name':name, 'value':value});
}

function flush()
{   
    for (i = 0 ; i < mylog.length ; i++){
        url_str += '&n[]=' + mylog[i].name + '&v[]=' + mylog[i].value;
    }
    url_str += '&r='+Math.floor(Math.random() * 100000);

    var img = new Image();
    var url = 'http://somedomain.com/pixel.php?' + url_str;
    img.src = url;
}

if (window.attachEvent) 
    window.attachEvent('onunload', flush);
else if (window.addEventListener) 
    window.addEventListener('unload', flush, false);
其他页面
该网站在所有浏览器中都会将我带到someotherpage.html,但只有Safari 5.0.5/Mac 10.6没有显示日志中单击的链接。在Safari检查器中执行一些控制台检查后,我发现Safari出现了“加载资源失败”错误。我怀疑这是因为虽然可以调用URL,但浏览器已决定继续(?)

在任何情况下,我都尝试过beforeunload事件,并使用setTimeout延迟页面卸载。我是
考虑完全更改HTML表单,但这将是一项相当大的工作。尽管如此,我还是愿意接受,除非有人的想法跳过了我的注意力。关于它如何在Safari 5.0.5(Mac 10.6)上工作,有什么建议吗?

我认为您正处于一种竞争状态,可以通过回拨固定像素负载来缓解

<form onclick="log('LINK_CLICKED', 'some other page'); this.submit();" action="someotherpage.html">Some other page</form>
函数日志(名称、值、回调)
{
push({'name':name,'value':value,'callback':callback});
}
函数flush()
{   
对于(i=0;i
谢谢!我混合使用了你的解决方案和。通过日志函数发送回调,并让COR进行调用。有一些折衷,但它们或多或少是可以容忍的。
function log(name, value, callback)
{
    mylog.push({'name':name, 'value':value, 'callback':callback});
}


function flush()
{   
    for (i = 0 ; i < mylog.length ; i++){
        url_str += '&n[]=' + mylog[i].name + '&v[]=' + mylog[i].value;
    }
    url_str += '&r='+Math.floor(Math.random() * 100000);

    var img = new Image();
    img.onload = logReady;
    var url = 'http://somedomain.com/pixel.php?' + url_str;
    img.src = url;
}

function logReady()
{
  for (i = 0 ; i < mylog.length ; i++){
       mylog[i].callback();
    }
}



<form onclick="log('LINK_CLICKED', 'some other page', function() { form.submit(); });" action="someotherpage.html">Some other page</form>