|
Поле HTML документа - автоматическая прокрутка вниз до конца. (управляемые формы) | ☑ | ||
---|---|---|---|---|
0
Andreyyy
21.06.19
✎
10:29
|
Не получается прокрутить вниз поле HTML документа.
Раньше работало с добавлением кода в конец страницы: </body> <script> function scrollBottom(){ document.body.scrollTop = document.body.scrollHeight; } </script> <body onload="scrollBottom()"> Потом с какого-то релиза сломалось. В браузере отрабатывает нормально. Как быть ? Сломал всю голову, в HTML скилл -1. Тестовый файл https://dropmefiles.com/xm3Zf |
|||
1
Юрий Лазаренко
21.06.19
✎
10:35
|
Попробуй в конце страницы поместить такой скрипт:
<script> window.onload = function() { alert( 'Документ и все ресурсы загружены' ); }; </script> |
|||
2
Юрий Лазаренко
21.06.19
✎
10:35
|
Вместо alert помести свой строку document.body.scrollTop = document.body.scrollHeight;
|
|||
3
Andreyyy
21.06.19
✎
10:58
|
Вот так в конце - не работает.
<script> window.onload = function() { document.body.scrollTop = document.body.scrollHeight; }; </script> </html> |
|||
4
Вафель
21.06.19
✎
11:06
|
а алерт работает?
|
|||
5
Вафель
21.06.19
✎
11:08
|
попробуй еще такой вариает
window.scrollTo(0, document.body.scrollHeight) |
|||
6
Andreyyy
21.06.19
✎
11:10
|
(4) Работает.
|
|||
7
Andreyyy
21.06.19
✎
11:11
|
(5) Не работает.
|
|||
8
Вафель
21.06.19
✎
11:16
|
а чему равен document.body.scrollHeight
|
|||
9
Вафель
21.06.19
✎
11:19
|
а зачем у тебя body 2 раза?
|
|||
10
Andreyyy
21.06.19
✎
11:59
|
(8) Убрал.
(9) равно "0". |
|||
11
Вафель
21.06.19
✎
12:00
|
у меня все заработало
все варианты |
|||
12
Вафель
21.06.19
✎
12:00
|
вот 1 из
<html> <head> <script> function bodyOnLoad() { document.body.scrollTop = document.body.scrollHeight; } </script> </head> <body onload=bodyOnLoad()> <table width="100%" border="1" cellspacing="0" cellpadding="2"> |
|||
13
Andreyyy
21.06.19
✎
12:08
|
(11)(12) Не работает ...
|
|||
14
ptiz
21.06.19
✎
12:08
|
(11) На 14 платформе?
|
|||
15
Andreyyy
21.06.19
✎
12:09
|
(14) 8.3.14.1694
|
|||
16
Andreyyy
21.06.19
✎
12:12
|
(12) Файл по этому примеру https://dropmefiles.com/Wmra0
В браузере работает. |
|||
17
Andreyyy
21.06.19
✎
12:26
|
+(16) В новую созданную обработку копипастю текст из файла и не скроллит.
Сверху так: <html> <head> <script> function bodyOnLoad() { document.body.scrollTop = document.body.scrollHeight; } </script> </head> <body onload=bodyOnLoad()> <table width="100%" border="1" cellspacing="0" cellpadding="2"> |
|||
18
Andreyyy
21.06.19
✎
15:00
|
UP
Это я что-то не так делаю или с платформой что-то не то, или фишка какая оригинальная нужна ? |
|||
19
Andreyyy
21.06.19
✎
15:14
|
Хоть костыль бы какой, если с платформой глюк.
|
|||
20
Юрий Лазаренко
21.06.19
✎
15:19
|
Если смотретьтвой тестовый файл из (0), то там html невалидный. Закрываюшего </table> нет совсем. Скрипт в итоге помещается внутрь таблицы. Причина может и не в этом, но исправить надо.
|
|||
21
Вафель
21.06.19
✎
15:26
|
вот все работаетdjn
https://dropmefiles.com/nmTIr |
|||
22
Andreyyy
21.06.19
✎
15:30
|
(21) На какой платформе работает ? У меня тоже самое.
|
|||
23
Вафель
21.06.19
✎
15:30
|
8.3.13.1809
|
|||
24
Вафель
21.06.19
✎
15:31
|
windows 10
|
|||
25
Andreyyy
21.06.19
✎
15:33
|
(20) Добавил "</table" - не помогло.
(23) На 8.3.13 какой-то у меня работало, потом сломалось. |
|||
26
Юрий Лазаренко
21.06.19
✎
15:34
|
Я сделал
|
|||
27
Юрий Лазаренко
21.06.19
✎
15:35
|
На 8.3.14.1565
Сейчас файл скину, проверь |
|||
28
Юрий Лазаренко
21.06.19
✎
15:37
|
https://yadi.sk/d/5Oadk988lgDBDA
Там внешняя обработка. Запусти, нажми кнопку "Огонь", посмотри, прокрутится или нет. Если прокрутится, то расскажу, где собака порылась. |
|||
29
Andreyyy
21.06.19
✎
15:38
|
(28) Прокручивается !
|
|||
30
Andreyyy
21.06.19
✎
15:40
|
(28) Понятно, через ожидание нужно команду дать.
Спасибо ! |
|||
31
Юрий Лазаренко
21.06.19
✎
15:43
|
(30) Через ожидание и на клиенте. И можно не в теле страницы html в скрипте, а непосредственно в коде 1С, документ html в коде 1С доступен со всеми его свойствами/методами и прочими причиндалами.
|
|||
32
Юрий Лазаренко
21.06.19
✎
15:46
|
+(31) Денег не надо ) Там у меня в личке URL, надо зайти на него и кликнуть "Голосовать", а то у нас борьба за первое место в голосовании.
|
|||
33
Вафель
21.06.19
✎
15:47
|
а в чем причина то? почему нужно обработчик ожиания то?
|
|||
34
Andreyyy
21.06.19
✎
15:48
|
(31) В боевом режиме прокрутилось, но не до конца, примерно на 2/3...
(32) Проголосовал. |
|||
35
Andreyyy
21.06.19
✎
15:51
|
+(34) Увеличение задержки до секунды не помогло.
|
|||
36
Вафель
21.06.19
✎
15:51
|
(35)а если отдельной кнопкой скролл сделать?
|
|||
37
Andreyyy
21.06.19
✎
15:54
|
+(34) Этот же самый html текст вставляю в обработку из (28) и по кнопке все работает.
|
|||
38
Andreyyy
21.06.19
✎
15:55
|
(36) Это архаизм конкретный, столько не выпью.
|
|||
39
Вафель
21.06.19
✎
15:55
|
(38) для проверки работоспособности
|
|||
40
Andreyyy
21.06.19
✎
15:57
|
Вот так заработало:
Элементы.КомментарииСписок.Документ.body.scrollTop = Элементы.КомментарииСписок.Документ.body.scrollHeight + 9999; |
|||
41
Юрий Лазаренко
21.06.19
✎
15:57
|
(33) document.onload срабатывает когда DOM загружен. window.onload срабатывает когда DOM, картинки и стили загружены. Типа. Потому что есть разница в браузерах. Что там за браузер сейчас в 1С - ХЗ. Надеяться на то, что скрипт сработает вовремя не стоит.
Почему обработчик ожидания - чтобы дать функции, которая формирует документ DOM, полностью отработать. Есть подозрение, что пока не завершилась функция на клиенте, которая дергает функцию на сервере, документ DOM до конца не формируется, а может и вообще не формируется. То есть, пока не завершится "Процедура Огонь(Команда)", никакого документа DOM на клиенте не будет. Или будет, но кастрированный. Надо исследовать этот момент. Поэтому даем функции завершиться полностью и только потом вызываем обработчик прокрутки. |
|||
42
Юрий Лазаренко
21.06.19
✎
15:57
|
(34) Спасибо!
|
|||
43
Andreyyy
21.06.19
✎
15:58
|
(39) в (37) выяснилось что текст html рабочий по кнопке.
|
|||
44
Andreyyy
21.06.19
✎
16:00
|
Огромное спасибо !
Думал что само рассосется как сломалось, но полгода, а воз и ныне там. |
|||
45
Вафель
21.06.19
✎
16:00
|
получается что именно не успевает вычислиться body.scrollHeight
|
|||
46
Юрий Лазаренко
21.06.19
✎
16:03
|
+(31) На клиенте - потому что на сервере документа DOM нет. То есть:
1. Рулить документом DOM на клиенте можно как угодно. Практически все, что можно сдеать в браузере яваскрптом, можно сделать языком 1С на клиенте. 2. Рулить документом DOM на сервере нельзя. Его там нет и быть не может. Поэтому при работе с документом в языке 1С всегда проверяйте, где выполняется код. Как-то так. |
|||
47
Вафель
21.06.19
✎
16:04
|
попробуй
offsetHeight вместо scrollHeight |
|||
48
Вафель
21.06.19
✎
16:05
|
(46) на сервере никто и не рулит. там мы только текст подсовываем
|
|||
49
Andreyyy
21.06.19
✎
16:07
|
(47) Элементы.КомментарииСписок.Документ.body.offsetHeight равен "0" после присвоения текста полю HTML, как и scrollHeight
|
|||
50
Вафель
21.06.19
✎
16:09
|
нужно в onload а не сразу после текста
|
|||
51
Юрий Лазаренко
21.06.19
✎
16:10
|
(48) Я написал на всякий случай тем, кто будет читать эту ветку в будущем.
|
|||
52
sitex
naïve
21.06.19
✎
16:11
|
(28) На (8.3.14.1630) попробовал чисто текст без ПодключитьОбработчикОжидания и с ним , поведение одинаковое, прокрутка есть.
|
|||
53
sitex
naïve
21.06.19
✎
16:15
|
(52) + убрал вообще с <body> -> onload="scrollBottom(). тоже норм.
|
|||
54
Andreyyy
21.06.19
✎
16:17
|
(5) Работает как надо.
|
|||
55
Юрий Лазаренко
21.06.19
✎
16:20
|
(52) Опыт разработки фронтов на веб показывает, что один и тот же код может работать в разных браузерах и разных системах настолько по-разному, что заманаешься писать все возможные варианты. Я пока не могу объяснить, почему в 1С это в одном случае работает, а в другом нет, надо глубоко лезть в новый 1Сный браузер. Просто приходилось сталкиваться с подобными задачами в JS, там это решалось путем завершения выполнения кода в одной функции и продолжения в другой через обработчик ожидания. Действия в итоге выполняются одни и те же, до документ успевает прийти в нужную кондицию.
Бывают и обратные задачи, когда надо однозначно все выполнить в одной функции. |
|||
56
Andreyyy
21.06.19
✎
16:21
|
(52) Оставлю через обработчик ожидания, а то может 7 пятниц на неделе.
|
|||
57
Andreyyy
21.06.19
✎
16:22
|
(54) к (47) offsetHeight вместо scrollHeight
|
|||
58
Вафель
21.06.19
✎
16:24
|
(56) сделай скрипт + обработчик.
что-то одно да сработает ))) |
|||
59
Andreyyy
21.06.19
✎
16:25
|
(58) И кнопку еще !
|
|||
60
Юрий Лазаренко
21.06.19
✎
16:41
|
Кстати, если ТС не против, я бы рассказал о подобном поведении платформы на докладе.
(0) Не против? |
|||
61
Вафель
21.06.19
✎
16:43
|
(60) Расскажешьш почему scrollHeight не вычисляется? или повторишь (41)
|
|||
62
Юрий Лазаренко
21.06.19
✎
16:46
|
(61) Думаю, что к сентябрю уже расскажу, почему.
|
|||
63
Andreyyy
21.06.19
✎
16:51
|
(60) Конечно не против ! Только за.
|
|||
64
Юрий Лазаренко
21.06.19
✎
16:55
|
(63) Спасибо
|
|||
65
Сияющий в темноте
21.06.19
✎
18:59
|
А чего,window onload через event повесить нельзя?
|
|||
66
Юрий Лазаренко
23.06.19
✎
12:12
|
(65) Можно, скрипт и так срабатывал. Вопрос в том, что документ в этот момент еще не сформирован как надо. Или не отображен как надо.
|
|||
67
Сияющий в темноте
24.06.19
✎
08:27
|
(66)вообще,если верить документации,то onload должен приходить после того как документ ПОЛНОСТЬЮ загружен,если это не так,то,значит,1с использует кривую реализацию html,и там можно будет ловить глюки на каждом шагу.
у осла было еще событие oncompose,насколько я помню. можно сделатб хитрость,в поле вставить iframe,а уже на нем отрабатывать событие загрузки,по идее,оно должно работать правильно. |
|||
68
Юрий Лазаренко
24.06.19
✎
09:55
|
(67) Документ скорее всего загружен, иначе и скрипт не загрузился бы. Вопрос в том, "открылось" ли окно с этим документом. Похоже, что документ уже заполнился, но элементы в нем не отобразились как положено. Поэтому высота страницы считается неверно.
|
|||
69
Andreyyy
18.07.19
✎
01:22
|
Поправка для web-клиента:
При обработчике ожидания за 0.1 секунды поле HTML документа не успевает сформироваться (Элементы.КомментарииСписок.Документ = Неопределено) и приходится опрашивать повторно, на второй-третий раз срабатывает. |
|||
70
Сияющий в темноте
18.07.19
✎
07:20
|
(69)в веб клиенте,поле - это iframe,и он в каждом браузере работает по свойму,но чаще всего,вообще в отдельном потоке,соответственно,нужно ловить события внутри самого html и писать его не через строку,а загрузкой,тогда onload честно отработает.
|
|||
71
Diversus
13.08.19
✎
15:09
|
Мне вот интересно почему в 8.3.14 не работает событие в body onscroll?
Пример. <html> <head> <script type='text/javascript'> function fonscroll(value){ var scrollpos = Math.max( $("html").scrollTop(), $("body").scrollTop() ); var elem = document.getElementById("scrollpos"); if (elem != null){ elem.innerHTML = scrollpos; } } </script> </head> <body onscroll='fonscroll()'> Тут текст <div id="scrollpos">0</div> </body> </html> Смысл такой, что при скролинге обновляется текст в scrollpos и мы при перерисовке можем указать куда сместиться. В 8.3.12 и сейчас в браузере это работает, а вот в 8.3.14 не работает. Событие onscroll вообще не срабатывает... Сталкивался кто? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |