Веселье продолжается.
<script type="text/javascript">
//Чем раньше ставим этот код, тем лучше
var LoadCounter={};
(function(){
var ERR_TIME = 'pict_load_time';
var LOAD_TIME = 'time';
var id = 'mysite.ru';
var startTime = new Date();
var resultStr = '';
var errorTime;
function now(){
return (new Date).getTime();
}
function sendData() {
if (location.host.search(id) == -1)
return false;
var img = document.createElement('img');
var host = location.host.replace(/^www\./, '');
img.src = 'http://mysite.ru/log_time_download.php?id='+id+'&url='+escape(host)+escape(location.pathname)+resultStr;
img.style.position = 'absolute';
img.style.left = '-5px';
img.style.top = '-5px';
img.style.width = '1px';
img.style.height = '1px';
document.body.insertBefore(img, document.body.firstChild);
}
LoadCounter.isError = function(el) {
errorTime = now();
if (el)
el.src = 'http://mysite.ru/1px.gif?r='+Math.random();
}
LoadCounter.isLoad = function() {
var secondTime = now() - errorTime;
if (resultStr) {
resultStr += '&'+ERR_TIME+'='+secondTime;
sendData();
} else {
resultStr += '&'+ERR_TIME+'='+secondTime;
}
}
LoadCounter.simpleLoad = function() {
var simpleTime = now() - startTime;
if (resultStr) {
resultStr += '&'+LOAD_TIME+'='+simpleTime;
sendData();
} else {
resultStr += '&'+LOAD_TIME+'='+simpleTime;
}
}
})()
</script>
где-нибудь в серединке:
<script type="text/javascript">
document.write('<img src="http://mysite.ru/1px.gif?r='+Math.random()+'" onload="LoadCounter.simpleLoad();" />');
</script>
<img src="about:blank" onerror="LoadCounter.isError(this)" onload="LoadCounter.isLoad(this)" />
pict_load_time - время между onerror и onload первой картинки
time - время от скрипта, до загрузки картинки (картинка вставляется с помощью document.write)
Т.е. по идее onload происходит один раз и никаких двойных и более времен быть не может.
Однако имеем, что имеем (опять же в FF):
&time=742&pict_load_time=200&time=2502&pict_load_t ime=1762&time=2597&pict_load_time=1857&time=2650&p ict_load_time=1910&time=2715...
Первым делом подумал про аякс, но он не используется на странице, да и не дружит аякс с document.write.
Опять же ошибка повторяется не у меня, поэтому потыркаться возможности нету, так что играем в гадалку...
Проблему можно решить в лоб, проверяя, первая ли это загрузка, но хочется понять, почему так происходит...