Если вы попытаетесь отправить Ajax-запрос, JSONP-запрос или даже запрос window.name при выгрузке, Safari и Chrome выполнят код, но сервер никогда не увидит запрос. Моя теория заключается в том, что поток выполнения никогда не позволяет тегу script работать до того, как он изменит страницу. Вот тестовая страница с тестом JSONP. Этот код (а также Ajax и window.name) создает запрос для test.html в Firefox и IE7, но не в 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.