На самом деле в документации не все описано относительно работы метода open.
Вроде бы должен перегружаться документ (вроде как набор nodes). Но думать, что документ равносилен дереву элементов, неправильно. Узлы действительно исчезают, однако появляются следующие вопросы:
1. Сохранятся ли переменные в window после применения document.open?
var a = 1;
window.onload = function test()
{
document.open("html/text", "replace");
document.write(1);
document.write(2);
document.close();
alert([window.a, window.test]);
}
Ответ: Да. Таким образом documentElement будет заново инициализирован, но объекты JS будут сидеть в памяти.
2. Элементы «в воздухе», созданные createElement, можно ли потом прилепить к новому дереву?
var element = document.createElement("span");
element.innerHTML = "Spartaaaa!!";
window.onload = function ()
{
document.open("html/text", "replace");
document.write(1);
document.write(2);
document.close();
alert(typeof element);
alert(element.tagName);
document.body.appendChild(element);
Ответ: Нет. При этом будет известно, что мы имеем дело с объектом. Но получить доступ к нему не удастся: разрешение отклонено. Вроде бы на первый взгляд кажется, что элементы, созданные createElement должны быть автономными (как экземпляры класса), однако это не так. Они жестко привязаны к документу. Таким образом документ — это уже не просто иерархия нодов, начиная от рута, но и «висячие в воздухе» элементы.
3. Восстановятся ли перегруженные встроенные функции языка JScript после применения метода open?
window.onload = function ()
{
window.setInterval = function (){return};
alert(window.setInterval);
document.open("html/text", "replace");
document.write(1);
document.write(2);
document.close();
alert(window.setInterval);
Ответ: Да. Таким образом в понятие «документ» добавятся набор встроенных функций языка.