如果您尝试在卸载时发送 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。