У меня есть html-страница, созданная javascript во время выполнения. В какой-то момент я хочу создать резервную копию этой страницы, чтобы позже ее восстановить. Страница описана DOM, поэтому логически необходимо сохранить сам DOM. Проблема в том, что нет никаких законных способов сделать это.Дамп всего дерева DOM (включая прослушиватели событий и наблюдателей мутаций)
Я нашел только интерфейс XMLSerializer, который можно использовать только для сериализации html (так что это не тот инструмент). Но мне нужно сохранить наблюдателей за мутациями и прослушивателей событий, такая «восстановленная» страница будет вести себя как ее предок.
Я также подумал о записи в файл журнала javascript над DOM. Но страница, которая строит себя во время выполнения, огромна и сложна, поэтому такой подход будет стоить много времени.
Любые идеи?
Существует не волшебный способ сделать это - сохранить трек наблюдателей/прослушивателей событий, которые вы устанавливаете (сделать журнал массива), и добавить это к вашему дампу. –
Обычно, как это делается, вы специально не сохраняете HTML и прослушиватели событий на странице, но, по мере того, как вы создаете страницу с помощью JS, вы создаете объект состояния, который описывает, что было сделано на странице. Затем вы пишете код, который может читать этот объект состояния, чтобы перестроить страницу таким же образом. Если вы действительно хороши, вы можете сделать код перестройки тем же кодом, что и код, который строит страницу в первый раз. – jfriend00
Вы можете вспомнить проблему, такую как код, который используется для поддержки стека отмены. Вместо сохранения целого состояния документа после каждого изменения, стек отмены обычно сохраняет инкрементные команды/данные, которые изменяют страницу, и вы можете вернуться в какое-либо конкретное состояние, просто повторно применив (или в случае отмены путем реверсирования) эти команды , Вы можете сделать то же самое для изменений в DOM. Команды более высокого уровня, которые вы сохраняете, тем меньше данных, которые вы обычно должны хранить. – jfriend00