4

如果您尝试在卸载时发送 Ajax 请求、JSONP 请求甚至是 window.name 请求,Safari 和 Chrome 会运行代码,但服务器永远不会看到该请求。我的理论是执行线程永远不允许脚本标记在更改页面之前运行。这是一个带有 JSONP 测试的测试页面。此代码(以及 Ajax 和 window.name)在 Firefox 和 IE7 中创建对 test.html 的请求,但不是 Safari:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
    </head>
    <body>

        <script language="javascript" type="text/javascript">
            window.onunload = function(){
                var encode = "UTF-8";
                var script = document.createElement('script');
                script.type = 'text/javascript';
                script.src= "/test.html";
                script.charset= encode;
                document.body.appendChild(script)
            }
        </script>

    </body>
</html>

有人知道解决这个问题的好方法吗?更具体地说,有人知道强制 Safari 在卸载时发送请求的方法吗?我发现的唯一解决方案(在我的情况下并没有真正帮助)是同步 XHR。

4

0 回答 0