|
Как сохранить и восстановить снимок живого HTML документа? | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
26.06.21
✎
20:28
|
Хочу сохранить в файл и восстановить из этого файла снимок живого HTML документа, т.е. чтобы он после восстановления продолжил "жить" как будто и не было этого прерывания его жизни, т.е. восстановились все обработчики событий и прочее.
Серверной стороны нет, т.е. куки не нужны. Желательно сделать встроенными средствами ОС Windows и платформы 1С. |
|||
1
TormozIT
гуру
26.06.21
✎
20:30
|
Сохранение выполняется всегда из ПолеHTMLДокумента. Восстанавливать предполагается в ПолеHTMLДокумента и в браузере.
|
|||
2
Вафель
26.06.21
✎
20:38
|
Если в переменных есть ссылки на функции то никак наверно
|
|||
3
Вафель
26.06.21
✎
20:38
|
А так
For (i in global) |
|||
4
TormozIT
гуру
26.06.21
✎
20:41
|
(3) Спасибо. Очень информативно.
|
|||
5
mistеr
26.06.21
✎
20:44
|
(0) Не очень понятно. Примеры "жизни", которая не восстанавливается обычным образом?
|
|||
6
Garykom
гуру
26.06.21
✎
20:47
|
(2) можно всю историю общения с сервером сохранить и потом прокрутить
|
|||
7
Вафель
26.06.21
✎
20:49
|
Как я понял задача восстановить работу скриптов
|
|||
8
TormozIT
гуру
26.06.21
✎
20:50
|
(7) Да. Скрипты должны тоже восстановить свое состояние.
|
|||
9
Garykom
гуру
26.06.21
✎
20:51
|
(0) во многих случаях это невозможно
JS полноценный ЯП/движок с "фоновыми", например на страничке после последнего обновления работает некий таймер/счетчик после сохранения и восстановления таймер собьется относительно реального времени и сервера ну и как минимум все токены доступа умрут |
|||
10
Garykom
гуру
26.06.21
✎
20:52
|
имхо сценарий использования подобного изврата придумал реальный тормоз
|
|||
11
TormozIT
гуру
26.06.21
✎
20:54
|
Понятно. Что есть вещи которые восстановить не получится. Надеюсь здесь мне их подскажут.
Но думаю бОльшую часть состояния можно восстановить. |
|||
12
Вафель
26.06.21
✎
20:57
|
Если скрипт сам пишешь, то можно его сделать сохраняемым
|
|||
13
Гений 1С
гуру
26.06.21
✎
21:19
|
(11) покури в сторону селениума, как это делается у Взрослых Парней Джавы
|
|||
14
Вафель
26.06.21
✎
21:19
|
(13) а сем нажиматель кнопок поможет?
|
|||
15
TormozIT
гуру
26.06.21
✎
21:26
|
Как я пока себе представляю решение задачи (0):
Сериализация 1. Сериализовать DOM дерево, куда как я понимаю и подключения обработчиков событий тоже попадут. 2. Обойти все глобальные переменные, проверить сериализацию каждой отдельно и выкинуть несериализуемые. Получить список из этих переменных и сериализовать его. Восстановление 1. Десериализовать DOM дерево, обеспечив невозможность выполнения обработчиков событий. 2. Восстановить глобальные переменные. 3. Разблокировать обработчики событий. |
|||
16
Garykom
гуру
26.06.21
✎
21:27
|
меня иногда удивляет узкость кругозора некоторых ИТшников
и они каким то местом вполне даже себе успешны |
|||
17
TormozIT
гуру
26.06.21
✎
21:27
|
Что будет с таймерами?
|
|||
18
Garykom
гуру
26.06.21
✎
21:27
|
(16) к (14) на прикол из (13)
|
|||
19
Вафель
26.06.21
✎
21:27
|
Не назначай обработчики скриптом, тогда и просто вме будет
|
|||
20
Вафель
26.06.21
✎
21:28
|
(17) откажись от таймеров тоже
|
|||
21
TormozIT
гуру
26.06.21
✎
21:30
|
(19) Не понял. Я не являюсь автором целевых скриптов. Они - в общем случае черные ящики.
|
|||
22
Garykom
гуру
26.06.21
✎
21:30
|
(15) блин тебе же написали еще в (6)
есть некое исходное/начальное состояние страницы которое легко получить ибо оно одинаково и загружается откуда то и есть некое куда пришли после кучи действий ну дык сохрани последовательность действий и далее где надо восстановить берешь исходное и прокручиваешь "последовательность действий" быстро и вуаля мы "восстановили" и тут даже хрень про селениум вполне в тему |
|||
23
Garykom
гуру
26.06.21
✎
21:32
|
Хотя надо знать задачу исходную
Думаю как обычно она намного проще и без подобных извратов решается |
|||
24
Вафель
26.06.21
✎
21:32
|
(21) тогда твоя задача не решаема в общем виде.
Юзай виртуалки |
|||
25
TormozIT
гуру
26.06.21
✎
21:37
|
(22) Хорошо. Как универсально все события ввода (клавиатура и мышь) залогировать и воспроизвести? Есть какие то готовые поделки для этого?
|
|||
26
Garykom
гуру
26.06.21
✎
21:38
|
(25) js прекрасно перехватывает все клики и ввод с клавы
|
|||
27
TormozIT
гуру
26.06.21
✎
21:39
|
(26) Я не спрашивал насколько прекрасно он это делает, если что.
|
|||
28
TormozIT
гуру
26.06.21
✎
21:41
|
Кроме событий ввода на документ HTML конечно воздействует и код из 1С. Например обработчики событий ДокументСформирован, onClick и т.д.
|
|||
29
TormozIT
гуру
26.06.21
✎
21:42
|
(28) Если мне нужно будет в другой форме 1С или в браузере восстановить состояние, то все эти воздействия воспроизвести не получится.
|
|||
30
Вафель
26.06.21
✎
21:48
|
Говорят Яндекс браузер умеет гибернировать вкладки
|
|||
31
TormozIT
гуру
26.06.21
✎
21:49
|
(30) Хорошо ему) Ну понятно что браузер имеет доступ КО ВСЕМУ. Поэтому это лишь вопрос желания сделать такую фичу.
У меня же источник - строго в 1С. |
|||
32
Вафель
26.06.21
✎
21:54
|
А что за задача такая что производьные страницы нужно гибернировать?
|
|||
33
TormozIT
гуру
26.06.21
✎
21:57
|
(32) Одна из целей - предоставить разработчику 1С возможность удобной отладки работы поля HTML документа. Встроенное средство (CTRL+ALT+SHIFT+F12) довольно кривое. Хочется переносить состояние HTML документа в браузер и там его пытать.
|
|||
34
Вафель
26.06.21
✎
22:00
|
Бросай, нерешпемая это задача.
Даже у Яндекса до конца не получилось |
|||
35
Гений 1С
гуру
26.06.21
✎
22:06
|
(33) ну тогда копай аналитически.
1. Дом модель ты можешь сохранить. 2. Кури, как сохранить состояние перменных джавы, возможно ли это и загруженные скрипты |
|||
36
TormozIT
гуру
26.06.21
✎
22:09
|
(34) Так мне и не обязательно на 100% решать ее. Достаточно будет решить с ограничениями. Конечно хочется минимизировать их.
|
|||
37
Вафель
26.06.21
✎
22:10
|
Ссылку на функцию нельзя сохранить, ибо это нужно кусок памяти сохранить, а доступа к этому нет
|
|||
38
Вафель
26.06.21
✎
22:11
|
А если это реакт какой, то там все вот так на ссылках
|
|||
39
acht
26.06.21
✎
23:16
|
(36) Ты не с той стороны заходишь. Ты просишь решения абстрактного вопроса, на которые получаешь не менее абстрактные ответы. Определи предметно "возможность удобной отладки работы поля HTML документа" и возможно, тебе расскажут как сделать каждую конкретную часть.
Иначе это "хочу, чтобы всё и всем" |
|||
40
acht
26.06.21
✎
23:19
|
(35) > Кури ... возможно ли это
Спасибо, геня, что осветил вопрос с неожиданной стороны. |
|||
41
ДедМорроз
27.06.21
✎
01:22
|
Самый простой вариант - браузер в виртуалку и делать снимок виртуалки и повторно его запускать.
|
|||
42
Вафель
27.06.21
✎
07:31
|
(41) так страница открыта не в браузере в этом то весь и вопрос
|
|||
43
TormozIT
гуру
27.06.21
✎
08:14
|
(15) + Еще надо сохранить Canvas, что тоже решаемо.
https://stackoverflow.com/questions/766137/javascript-canvas-serialization-deserialization |
|||
44
TormozIT
гуру
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 |
|||
47
sikuda
27.06.21
✎
21:29
|
(46) Да современный сайт без кода серверной части в общем случае не востанавливается.
ТС смирись |
|||
48
TormozIT
гуру
27.06.21
✎
22:22
|
(47) Вроде в (0) написано, что серверной части нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |