Из-за точного формата сериализованного файла добавление действительно испортит его. Вы должны записать все объекты в файл как часть одного и того же потока, иначе он будет сбой при чтении метаданных потока, когда он ожидает объект.
Вы можете прочитать спецификацию Serialization Specification для более подробной информации или (проще) прочитать эту нить , где Roedy Green говорит в основном то, что я только что сказал.
Это использует преимущество DOMContentLoaded, которое запускается перед загрузкой, но позволяет вам сохранить всю свою ненавязчивость ...
window.onload - Дин Эдвардс - В блоге говорится подробнее об этом - и вот полный код, скопированный из комментариев того же блога.
// Dean Edwards/Matthias Miller/John Resig
function init() {
// quit if this function has already been called
if (arguments.callee.done) return;
// flag this function so we don't do the same thing twice
arguments.callee.done = true;
// kill the timer
if (_timer) clearInterval(_timer);
// do stuff
};
/* for Mozilla/Opera9 */
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, false);
}
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
init(); // call the onload handler
}
};
/*@end @*/
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
init(); // call the onload handler
}
}, 10);
}
/* for other browsers */
window.onload = init;
Почему бы и нет. использовать собственное событие onload
окна окна
?
window.onload = function () {
alert("LOADED!");
}
Если не ошибаюсь, это совместимо со всеми браузерами.
document.body.onload
- кроссбраузерный, но устаревший механизм который позволяет только один обратный вызов (вы не можете назначить ему несколько функций).
Ближайшая «стандартная» альтернатива, addEventListener
не поддерживается Internet Explorer (он использует attachEvent
) , поэтому вы, вероятно, захотите использовать библиотеку (jQuery, MooTools, prototype.js и т. д.), чтобы абстрагироваться от уродства кроссбраузерности для вас.
Есть несколько различных методов, которые вы должны использовать для разных браузеров. Однако такие библиотеки, как jQuery, предоставляют кроссбраузерный интерфейс, который сделает все за вас.