Как использовать WebView для обнаружения динамических обновлений HTML? - PullRequest
2 голосов
/ 22 августа 2011

Попытка мониторинга и управления некоторыми проекторами, каждый со встроенным веб-сервером. Статус проекторов динамически обновляется до страницы посредством javascript.

Мне удалось получить html и установить статус, который я искал, используя объект WebView. Тем не менее, когда статус меняется, мне нужно обновить свои значения, но я не могу 'найти событие, которое обнаружило бы такие изменения.

Например, когда я впервые получаю доступ к состоянию включения / выключения, оно отображается как Неизвестно и не будет обновляться до включения / выключения в течение нескольких секунд после - (void) webView: (WebView *) отправитель didFinishLoadForFrame :( Событие фрейма WebFrame *).

Я могу установить таймер для опроса значений, но я бы предпочел, чтобы он срабатывал при каком-либо событии (или наблюдал за любым изменением значения). Есть ли такие события? Я заглянул в WebView, WebFrame, но, похоже, ничего не нашел.

Или есть способ наблюдать переменную javascript? Значения, которые я ищу, хранятся в переменных javascript.

Или, может быть, есть другие способы сделать это?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Если вы можете найти какие-либо события JS hooks / dom, которые запускаются при изменении вашего контента, вы можете открыть URL с пользовательской схемой (например, «refresh: // content») из JS и реализовать webView:shouldStartLoadWithRequest:navigationType:, в котором выможете проверить схему.

Если вы не можете найти какие-либо правильные события, вам нужно просто опрашивать значения переменной JS каждые 5-10 секунд с помощью [webView stringByEvaluatingJavaScriptFromString:@"js_variable_name"]

0 голосов
/ 22 августа 2011

Если вы не контролируете JavaScript, я сомневаюсь, что вы можете вызвать событие в ответ на вызов AJAX.Я думаю, вам придется периодически искать изменения, используя NSTimer scheduledTimerWithTimeInterval:.Например, чтобы получить значение varName, выполните следующее:

NSString *value = [webView stringByEvaluatingJavaScriptFromString:@"varName"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...