2016-01-21 2 views
1

Я создаю стороннюю библиотеку в Android, которая работает в WebViews и анализирует их производительность.Прослушивание изменения содержимого HTML внутри WebView

Из работы, выполненной до сих пор, я обнаружил, что некоторые серверы объявлений вызывают рекламные Web-объекты Banner и автоматически обновляют объявление каждые X секунд.

Во время автоматического обновления я заметил, что они заменяют HTML-контент новым объявлением, а не создают новый экземпляр WebView.

Мне нужно поймать эти перезагрузки, не мешая инъекциям JS.

Я бы ожидал, что у меня есть какой-то метод setOnDomChangedEventListener, но я не смог найти его.

Какую технику я могу использовать, чтобы поймать эти события?

ответ

0

Прежде всего, перезагрузки и изменения DOM - это разные вещи. Страница может изменить DOM, не загружая ничего. Перезагрузка страницы повторно инициализирует DOM и JS-контекст с нуля, поэтому это не то же самое, что динамическое обновление дерева DOM.

Если вы хотите прослушивать сетевые нагрузки, вам необходимо использовать обратный вызов в WebView.

Прослушивание изменений DOM невозможно с помощью API Java WebView. Один из способов сделать это - ввести код на страницу и использовать MutationObserver(doc). Просто имейте в виду, что если перезагрузка страницы, вам нужно будет повторно ввести код.

Менее интрузивным, но более привлекательным способом является использование удаленной веб-отладки. Протокол отладки WebView использует опоры DOM breakpoints. Фактически, если вы создаете структуру анализа производительности, это может быть хорошим подходом, поскольку это позволит вам измерять и отслеживать множество вещей. Но имейте в виду, что из-за соображений безопасности, чтобы приложение Android подключалось к удаленному сокету для отладки, оно должно запускаться либо как пользователь shell (как adb), либо быть подписанным с тем же ключом, что и целевое приложение.

Смежные вопросы