bitbucket.org/mckamey/duel/raw/tip/duel-js/target/duel.js

юбопытно, что опыт людей с заменойвсе документ во время выполнения в веб-приложении Ajax. Это редко, но я обнаружил несколько ситуаций, когда приложение требует перестройки всей страницы ивсе присутствует локально, без необходимости использования другого сервера.

Я могу легко подготовить новый документ какили новое дерево DOM или в виде строки. Поэтому я оцениваю компромиссы для различных подходов.

Если я хочу использовать строковый подход, это похоже на работу:

document.open();
document.write(newStringDoc);
document.close();

Большинство браузеров делают это просто отлично, но у многих наблюдается небольшое мерцание при повторном рендеринге. Я заметил, что во второй раз через Firefox 4.0b7 будет просто сидеть и крутиться, как будто он загружается. Нажатие кнопки «Стоп» на панели адреса завершает визуализацию страницы. (Редактировать: это, похоже, исправлено в 4.0b8) Также этот метод, по-видимому, не позволяет пользователю нажать кнопку обновления, чтобы перезагрузить текущий URL (он загружает динамически генерируемую страницу).

Если я использую новый подход дерева DOM (который имеет различные преимущества / недостатки в гибкости и скорости), то это, кажется, работает:

document.replaceChild(newDomDoc, document.documentElement);

Большинство браузеров, кажется, справляются с этим прекрасно без мерцания. К сожалению, бета-версия IE9 добавляет «DOM Exception: HIERARCHY_REQUEST_ERR (3)» вreplaceChild и никогда не завершает. Я не пробовал последнюю версию предварительного просмотра, чтобы увидеть, если это просто новая ошибка, которая была исправлена. (Редактировать: это, кажется, исправлено в RC1.)

Мой вопрос: у кого-нибудь есть другой подход, чем любой из них? Есть ли у кого-нибудь еще предостережения, когда, возможно, определенный браузер в корне нарушает один из этих подходов?

Обновить: Возможно, это добавит контекст и поможет воображению. Рассмотрим ситуацию, когда приложение находится в автономном режиме. Нет доступных серверов для перенаправления или обновления. Необходимое состояние приложения уже загружено (или сохранено) на стороне клиента. Пользовательский интерфейс построен из клиентских шаблонов.

Я считаю, что Gmail использует встроенные фреймы внутри корневого документа. Похоже, что исходный документ, по крайней мере, для некоторых из этих iframes - это просто пустой документ HTML5, которым затем манипулирует родительский документ.

Использование iframe было бы другим вариантом требования заменить текущий документ путем замены всего дочернего iframe или только его документа. Однако существует такая же ситуация с тем, какой подход добавить новый документ в iframe.

Ответы на вопрос(1)

Ваш ответ на вопрос