Как узнать, когда меняется содержимое UIWebView? - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над приложением для iOS, используя Xcode.Приложение обновляет UIWebView каждые X секунд.

В качестве фона, приложение называется «Обновление браузера»: https://itunes.apple.com/us/app/browser-auto-refresh/id1177883066?mt=8).

Я пытаюсь реализовать предупреждение, когда содержимое UIWebView изменяется после обновления страницы (т.е.страница, которая в данный момент обновляется, была только что обновлена ​​владельцем этой страницы).Мне удалось получить заголовки ответа, но я не вижу информации eTag с нескольких сайтов (включая Google.com).

Кто-нибудь знает, как определить, что содержимое веб-страницы изменилось при обновлении страницы UIWebView?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Я думаю, что Сами Хульт сделал хороший вывод о попытке найти значимые данные для вычисления контрольной суммы.Я могу предложить поискать контент для чтения в Safari, он не будет работать со всеми возможными интернет-страницами, но может работать для блогов и новостных сайтов.Для справки взгляните на это https://medium.com/@mandy.michael/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9 Некоторые новостные сайты, вероятно, будут обновляться через регулярные промежутки времени, чтобы показывать новый контент, поэтому вы сможете получать уведомления, просто внедрив метод делегата shouldstartloadwithrequest.Я бы избегал http заголовков для произвольных страниц.

0 голосов
/ 01 декабря 2018

Как заявил Питер Пайчл, содержимое, которое ваш UIWebView помещает на свою тарелку, обычно не находится под вашим контролем.Это означает, что - если вы не полагаетесь только на фиксированный набор служб, находящихся строго под вашим контролем, - вы не можете полагаться на HTTP-заголовки для поиска какой-либо полезной мета-информации.

Как он и предлагал, вы можете вычислить контрольную суммусодержимого страницы (это то, что сильный Etag, скорее всего, будет делать в любом случае) и сравнить его с недавно извлеченной версией.Недостатком является то, что метод по своей природе strong , и вы получите ложные срабатывания, если вас интересуют только семантические обновления.Чтобы сделать ваше приложение бесполезным для определенного сайта, владелец может просто вставить метку времени где-нибудь в содержимое, поскольку каждое обновление будет выдавать другую контрольную сумму.

Следовательно, вы можете попытаться нормализовать данные перед вычислением контрольной суммы таким образом, чтобы принимать во внимание только значимые данные.Это, скорее всего, требует априорного знания сайта, который вы просматриваете, чтобы быть эффективным.

Другим способом было бы вычисление некоторой метрики подобия (с нормализацией или без нее) и иметьпорог для «обновленного» оповещения.Это может потребовать вычислительных ресурсов, и, что еще хуже, может потребоваться даже больше априорной информации (по крайней мере, метапараметров, таких как порог).

...