|
Полноценное взаимодействие с 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) Имеешь в виду "Сформировать любой заголовок, который будет соответствовать браузеру"?
Да. А современные системы безопасности на веб-серверах позволяют отловить большинство заходов, выполненных не живым человеком, а скриптом( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |