Может ли весь веб-документ кэшироваться / архивироваться (включая точное состояние DOM), а затем перезагружаться? - PullRequest
0 голосов
/ 11 января 2010

представьте, что мы загрузили сложный веб-сайт с большим количеством Javascript, который загружал всю информацию через AJAX и производил вычисления на основе пользовательского ввода. Итак, теперь предположим, что мы хотим заархивировать его таким образом, чтобы потом можно было надежно загрузить его из файла (возможно, даже без подключения к Интернету) и изучить его поведение / отладить его / и т.д. Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 11 января 2010

Браузеры уже делают это, чтобы кнопка «Назад» работала быстро - в Firefox она называется «bfcache». Хотя этот кеш живет только в памяти. Я не знаю, можно ли сериализовать его в файл, если да, это было бы очень интересно.

1 голос
/ 11 января 2010

Я не думаю, что есть способ экспортировать все состояние DOM без ручного просмотра каждого фрагмента и его сохранения. Существует много информации, которая представляет этот DOM, чем то, что видно в источнике.

Например, вы можете сохранить положение полосы прокрутки окна, которое доступно в объекте окна, как window.scrollX и window.scrollY. Это только один пример, но нужно сохранить много другой информации о состоянии, включая подключенные обработчики событий и т. Д.

Если вы могли бы определить части, которые соответствуют вашим целям, игнорируя при этом другие, вы можете сохранить их локально, используя Google Gears (теперь устаревший) или новое Локальное хранилище , введенное в HTML5, и если вы уже сериализовав эту информацию, вы можете передать ее на какой-нибудь сервер и восстановить ее оттуда. Новый механизм хранения в HTML5 называется DOM Storage, но он немного вводит в заблуждение, потому что это просто хранилище пар ключ-значение, где ключи и значения являются строками.

Редактировать : Это может быть другая точка зрения на проблему, но здесь она идет. Вместо сохранения всего состояния DOM, вы можете сохранить только начальное состояние и соответствующие действия, которые его изменяют. Чтобы добраться до конечного состояния, будет использован механизм воспроизведения, который запускает каждое действие последовательно. Это популярный шаблон проектирования, известный как шаблон команд . Вот как многопользовательские игры поддерживают актуальность и синхронизацию каждого игрока, передавая только действия игрока, такие как нажатие клавиши, движение мыши и т. Д., Вместо всего вида, и получатель применяет эти действия для обновления своего состояния. Это намного сложнее, чем на практике, но в этом суть.

0 голосов
/ 11 января 2010

Где бы вы хотели его хранить?

В настоящее время нет способа хранить что-либо на стороне браузера (кроме новых функций браузера, которые установили очень немногие). Единственным реалистичным решением было бы использование Cookie, если DOM достаточно мал (это потому, что Cookie может содержать только определенное количество данных).

Если вы хотите сохранить DOM на стороне сервера, вы можете использовать document.body.innerHTML для доступа к текущему состоянию DOM и затем отправить его на ваш сервер.

...