Имя: Пароль:
1C
1С v8
Полноценное взаимодействие с WebView - возможно ли?
,
0 vllv
 
18.06.24
06:50
Всем привет!
Есть задача в мобильном приложении 1С открыть сайт провайдера и отслеживать в нём перенаправление (редирект). Редирект сайт вызывает средствами JS, кажется location.replace.
За вебвью в мобильном приложении 1С отвечает поле HTML документа. Соответственно помещаем в него URL и ждём события ДокументСформирован.
Но: веб-движок что в Android, что в Windows сначала загружает первую страницу, затем, не возвращая ДокументСформирован, выполняет действие редиректа на ней на вторую страницу, и к моменту события ДокументСформирован возвращает в 1С уже загруженную вторую. URL в поле HTML также меняется уже после окончательной загрузки.
Согласно схеме интеграции мы не должны допускать загрузки второй страницы, а перехватить начало редиректа, спарсить URL и показать пользователю уже третью страницу с данными, полученными из URL второй страницы. Сделано это вероятно потому, что в обычных приложениях Android и IOs такое взаимодействие с системным WebView проблемы не вызывает.

Вариант имитировать браузер Get-запросами отпадает: на первой странице может оказаться капча, и вообще провайдер воюет с роботизированными запросами. Внешнюю компоненту для открытия штатного WebView тоже писать не хочется (каждый раз возня при сборке, и вообще вероятные проблемы в поддерживаемости).

Вопрос, если вдруг кто-то плотно работал с WebView: может быть есть способы более тесного взаимодействия с полем HTML-документа, чтобы его действительно контролировать, или вообще незадокументированная возможность открыть системное WebView?
1 vde69
 
18.06.24
07:00
вообще редирект выполняется web сервером а не клиентом.

и отследить можно по коду возврата
3xx: Redirection (перенаправление):
300 Multiple Choices («множество выборов»)[3];
301 Moved Permanently («перемещено навсегда»)[3];
302 Found («найдено»)[3];
303 See Other («смотреть другое»)[3];
304 Not Modified («не изменялось»)[8];
305 Use Proxy («использовать прокси»)[3];
306 — зарезервировано (код использовался только в ранних спецификациях)[3];
307 Temporary Redirect («временное перенаправление»)[3];
308 Permanent Redirect («постоянное перенаправление»)[9].
2 vllv
 
18.06.24
07:12
(1) В том-то и дело, что код возврата нам смотреть негде: в поле HTML-документа нам возвращается уже готовая последняя страница, а где там в веб-движке был код 30Х, и сколько раз - мы не знаем.
3 vllv
 
18.06.24
07:18
Уточню: промежуточные страницы в поле HTML-документа мелькают, но их адрес и момент редиректа не узнать, поскольку в свойство ПолеHTMLДокумента.URL записывается только последний адрес, и только после ДокументСформирован.
4 sikuda
 
18.06.24
10:08
(0) Нравятся мне 1С-ники живущие в своем мире и вечно пытающие переделать все под себя.

Как создавался браузер, какие технологии безопасности заложены в него, как правильно их использовать? Это ненужные вопросы мешающие зарабатывать...

Каковы последствия фишинга URL-адресов данных?
5 vllv
 
18.06.24
10:21
(4) Удивительно, но эта PoC выполняется по официальной инструкция от владельца сайта, он же провайдер услуги:
1. Invoke the login url in embedded webview
2. Monitor the webview linking url as below
3. Re-write the linking url by changing the success url and failure url with SP app scheme and host

Так что никаких придумок. Провайдер сам так решил. И у разработчиков классических мобильных приложений проблем с этой инструкцией нет. А у разработчиков приложений на мобильной платформе 1С - есть, потому что нет мгновенного доступа к текущему адресу Webview.
6 vde69
 
18.06.24
10:36
Сделай запрос через http и результат смотри
7 sikuda
 
18.06.24
11:47
(5) Разработчики классических мобильных приложений как правило используют библиотеку OkHttp в 1С это аналог HTTP запросы, тебе это (6) советуют использовать
WebView это компонент Android, типа минимального браузера.
Так как компоненты 1С достаточно ограничены, его(html поле) часто используют для интерфейсных частей.
8 vllv
 
18.06.24
11:57
(6) (7) в первопосте упомянул, что HTTP - это нерабочий вариант из-за вероятной капчи и борьбы провайдера с роботизированными запросами.
9 Garykom
 
гуру
18.06.24
12:03
(8) Сделай запрос через HTTPСоединение и результат смотри
И показывай его в ПолеHTML
С этой твоей капчей и прочим
10 Garykom
 
гуру
18.06.24
12:07
(9)+ Я надеюсь для тебя не будет открытием что в реквизит строковый связанный с ПолеHTML можно писать не только url
Но и полное body (html страницы)
Причем поправленное, с добавкой своей магии JS
11 sikuda
 
18.06.24
12:12
(8) То есть Вы и занимаетесь фишингом URL-адресов.
Если это возможно делайте через браузер
https://www.w3schools.com/jsref/obj_location.asp
, а потом уже забирайте данные в 1С.
12 vllv
 
18.06.24
12:20
(9) (10) упомянул же: владелец сайта воюет с роботизированными запросами. У него это написано в правилах сотрудничества. Если интересно, то а) за нарушение - бан; б) уже сейчас при попытке сделать Http - соединение из 1С с имитацией браузера (сто тыщ нужных заголовков) - вместо первой страницы сайт говорит об ошибке. Конечно, могу найти способ обойти, но где гарантия, что ещё что-то новое не придумают? ну и читаем пункт а).
(11) Увы, через браузер недопустимо условиями задачи. Делаем запрос авторизации для получения токена, он должен уходить из мобильного приложения и в него возвращаться. Даже если из приложения открыть браузер, то браузер потом не вернёт интент   в мобильное приложение.
13 Garykom
 
гуру
18.06.24
12:33
(12) Мдя
14 vde69
 
18.06.24
12:53
(12) 1с позволяем сформировать ЛЮБОЙ заголовок, который на 100% будет соответсвовать мобильной версии
15 vllv
 
18.06.24
13:06
(14) Имеешь в виду "Сформировать любой заголовок, который будет соответствовать браузеру"?
Да. А современные системы безопасности на веб-серверах позволяют отловить большинство заходов, выполненных не живым человеком, а скриптом(