Вход | Регистрация
 

Как сохранить и восстановить снимок живого HTML документа?

Как сохранить и восстановить снимок живого HTML документа?
Я
   TormozIT
 
26.06.21 - 20:28
Хочу сохранить в файл и восстановить из этого файла снимок живого HTML документа, т.е. чтобы он после восстановления продолжил "жить" как будто и не было этого прерывания его жизни, т.е. восстановились все обработчики событий и прочее.
Серверной стороны нет, т.е. куки не нужны.
Желательно сделать встроенными средствами ОС Windows и платформы 1С.
   TormozIT
 
1 - 26.06.21 - 20:30
Сохранение выполняется всегда из ПолеHTMLДокумента. Восстанавливать предполагается в ПолеHTMLДокумента и в браузере.
   Вафель
 
2 - 26.06.21 - 20:38
Если в переменных есть ссылки на функции то никак наверно
   Вафель
 
3 - 26.06.21 - 20:38
А так
For (i in global)
   TormozIT
 
4 - 26.06.21 - 20:41
(3) Спасибо. Очень информативно.
   mistеr
 
5 - 26.06.21 - 20:44
(0) Не очень понятно. Примеры "жизни", которая не восстанавливается обычным образом?
   Garykom
 
6 - 26.06.21 - 20:47
(2) можно всю историю общения с сервером сохранить и потом прокрутить
   Вафель
 
7 - 26.06.21 - 20:49
Как я понял задача восстановить работу скриптов
   TormozIT
 
8 - 26.06.21 - 20:50
(7) Да. Скрипты должны тоже восстановить свое состояние.
   Garykom
 
9 - 26.06.21 - 20:51
(0) во многих случаях это невозможно
JS полноценный ЯП/движок с "фоновыми", например на страничке после последнего обновления работает некий таймер/счетчик
после сохранения и восстановления таймер собьется относительно реального времени и сервера

ну и как минимум все токены доступа умрут
   Garykom
 
10 - 26.06.21 - 20:52
имхо сценарий использования подобного изврата придумал реальный тормоз
   TormozIT
 
11 - 26.06.21 - 20:54
Понятно. Что есть вещи которые восстановить не получится. Надеюсь здесь мне их подскажут.
Но думаю бОльшую часть состояния можно восстановить.
   Вафель
 
12 - 26.06.21 - 20:57
Если скрипт сам пишешь, то можно его сделать сохраняемым
   Гений 1С
 
13 - 26.06.21 - 21:19
(11) покури в сторону селениума, как это делается у Взрослых Парней Джавы
   Вафель
 
14 - 26.06.21 - 21:19
(13) а сем нажиматель кнопок поможет?
   TormozIT
 
15 - 26.06.21 - 21:26
Как я пока себе представляю решение задачи (0):

Сериализация
1. Сериализовать DOM дерево, куда как я понимаю и подключения обработчиков событий тоже попадут.
2. Обойти все глобальные переменные, проверить сериализацию каждой отдельно и выкинуть несериализуемые. Получить список из этих переменных и сериализовать его.

Восстановление
1. Десериализовать DOM дерево, обеспечив невозможность выполнения обработчиков событий.
2. Восстановить глобальные переменные.
3. Разблокировать обработчики событий.
   Garykom
 
16 - 26.06.21 - 21:27
меня иногда удивляет узкость кругозора некоторых ИТшников
и они каким то местом вполне даже себе успешны
   TormozIT
 
17 - 26.06.21 - 21:27
Что будет с таймерами?
   Garykom
 
18 - 26.06.21 - 21:27
(16) к (14) на прикол из (13)
   Вафель
 
19 - 26.06.21 - 21:27
Не назначай обработчики скриптом, тогда и просто вме будет
   Вафель
 
20 - 26.06.21 - 21:28
(17) откажись от таймеров тоже
   TormozIT
 
21 - 26.06.21 - 21:30
(19) Не понял. Я не являюсь автором целевых скриптов. Они - в общем случае черные ящики.
   Garykom
 
22 - 26.06.21 - 21:30
(15) блин тебе же написали еще в (6)

есть некое исходное/начальное состояние страницы которое легко получить ибо оно одинаково и загружается откуда то
и есть некое куда пришли после кучи действий

ну дык сохрани последовательность действий и далее где надо восстановить берешь исходное и прокручиваешь "последовательность действий" быстро
и вуаля мы "восстановили"

и тут даже хрень про селениум вполне в тему
   Garykom
 
23 - 26.06.21 - 21:32
Хотя надо знать задачу исходную

Думаю как обычно она намного проще и без подобных извратов решается
   Вафель
 
24 - 26.06.21 - 21:32
(21) тогда твоя задача не решаема в общем виде.
Юзай виртуалки
   TormozIT
 
25 - 26.06.21 - 21:37
(22) Хорошо. Как универсально все события ввода (клавиатура и мышь) залогировать и воспроизвести? Есть какие то готовые поделки для этого?
   Garykom
 
26 - 26.06.21 - 21:38
(25) js прекрасно перехватывает все клики и ввод с клавы
   TormozIT
 
27 - 26.06.21 - 21:39
(26) Я не спрашивал насколько прекрасно он это делает, если что.
   TormozIT
 
28 - 26.06.21 - 21:41
Кроме событий ввода на документ HTML конечно воздействует и код из 1С. Например обработчики событий ДокументСформирован, onClick и т.д.
   TormozIT
 
29 - 26.06.21 - 21:42
(28) Если мне нужно будет в другой форме 1С или в браузере восстановить состояние, то все эти воздействия воспроизвести не получится.
   Вафель
 
30 - 26.06.21 - 21:48
Говорят Яндекс браузер умеет гибернировать вкладки
 
 
   TormozIT
 
31 - 26.06.21 - 21:49
(30) Хорошо ему) Ну понятно что браузер имеет доступ КО ВСЕМУ. Поэтому это лишь вопрос желания сделать такую фичу.
У меня же источник - строго в 1С.
   Вафель
 
32 - 26.06.21 - 21:54
А что за задача такая что производьные страницы нужно гибернировать?
   TormozIT
 
33 - 26.06.21 - 21:57
(32) Одна из целей - предоставить разработчику 1С возможность удобной отладки работы поля HTML документа. Встроенное средство (CTRL+ALT+SHIFT+F12) довольно кривое. Хочется переносить состояние HTML документа в браузер и там его пытать.
   Вафель
 
34 - 26.06.21 - 22:00
Бросай, нерешпемая это задача.
Даже у Яндекса до конца не получилось
   Гений 1С
 
35 - 26.06.21 - 22:06
(33) ну тогда копай аналитически.
1. Дом модель ты можешь сохранить.
2. Кури, как сохранить состояние перменных джавы, возможно ли это и загруженные скрипты
   TormozIT
 
36 - 26.06.21 - 22:09
(34) Так мне и не обязательно на 100% решать ее. Достаточно будет решить с ограничениями. Конечно хочется минимизировать их.
   Вафель
 
37 - 26.06.21 - 22:10
Ссылку на функцию нельзя сохранить, ибо это нужно кусок памяти сохранить, а доступа к этому нет
   Вафель
 
38 - 26.06.21 - 22:11
А если это реакт какой, то там все вот так на ссылках
   acht
 
39 - 26.06.21 - 23:16
(36) Ты не с той стороны заходишь. Ты просишь решения абстрактного вопроса, на которые получаешь не менее абстрактные ответы. Определи предметно "возможность удобной отладки работы поля HTML документа" и возможно, тебе расскажут как сделать каждую конкретную часть.

Иначе это "хочу, чтобы всё и всем"
   acht
 
40 - 26.06.21 - 23:19
(35) > Кури ... возможно ли это
Спасибо, геня, что осветил вопрос с неожиданной стороны.
   ДедМорроз
 
41 - 27.06.21 - 01:22
Самый простой вариант - браузер в виртуалку и делать снимок виртуалки и повторно его запускать.
   Вафель
 
42 - 27.06.21 - 07:31
(41) так страница открыта не в браузере в этом то весь и вопрос
   TormozIT
 
43 - 27.06.21 - 08:14
(15) + Еще надо сохранить Canvas, что тоже решаемо.
https://stackoverflow.com/questions/766137/javascript-canvas-serialization-deserialization
   TormozIT
 
44 - 27.06.21 - 09:25
Тут https://www.sqlpac.com/en/documents/javascript-listing-active-event-listeners.html написано,
что обработчики подключенные через addEventListener нельзя обойти встроенными методами.
No native method exists yet in the DOM specifications to retrieve the events defined through the method addEventListener.

Только в консоли отладки браузеров доступна функция перечисления обработчиков событий.
getEventListeners(domElement)

Таким образом даже получить все обработчики событий оказалось на удивление сложнее, чем я думал.
Ну и дальше идет конечно огромное препятствие в виде ссылок на функции, которые как уже писали выше невозможно восстановить штатными средствами.
В ссылке на функцию есть указатель на скрипт и номер строки, т.е. найти это строку то можно, но вот создать указатель на определенную в ней функцию штатными средствами нельзя.
https://i.imgur.com/m5KTu2x.png
   Вафель
 
45 - 27.06.21 - 10:09
А если учесть что функции могут иметь замыкания, то все...
   Вафель
 
46 - 27.06.21 - 10:10
Типа
А=1;
F=x=>x+A
   sikuda
 
47 - 27.06.21 - 21:29
(46) Да современный сайт без кода серверной части в общем случае не востанавливается.
ТС смирись
   TormozIT
 
48 - 27.06.21 - 22:22
(47) Вроде в (0) написано, что серверной части нет.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.