Чтение содержимого HTML из UIWebView

Статические члены класса.

Если они используются в нескольких местах одним классом, обычно проще держать вещи организованными - и позже найти, где вы все определили - если вы оставите их определенными в классе, который их использует. Определение их на месте затрудняет их поиск и последующее изменение. И я бы выбрал конкретный класс для анонимного пространства имен для более чистого определения и использования класса.

131
задан Vertexwahn 4 March 2016 в 16:35
поделиться

3 ответа

Второй вопрос на самом деле легче ответить. Посмотрите на метод stringWithContentsOfURL: encoding: error: NSString - он позволяет вам передать URL-адрес в качестве экземпляра NSURL (который можно легко создать из NSString) и возвращает строку с полным содержимым страницу по этому URL-адресу. Например:

NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL 
                                                encoding:NSASCIIStringEncoding
                                                   error:&error];

После запуска этого кода googlePage будет содержать HTML для www.google.com, а error будет содержать любые ошибки, обнаруженные при выборке. (Вы должны проверить содержимое ошибки после выборки.)

Другой путь (из UIWebView) немного сложнее, но в основном это та же концепция. Вы' Мне нужно будет вытащить запрос из представления, а затем выполнить выборку, как раньше:

NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL 
                                          encoding:NSASCIIStringEncoding
                                             error:&error];

РЕДАКТИРОВАТЬ: Однако оба этих метода снижают производительность, поскольку они выполняют запрос дважды. Вы можете обойти это, захватив содержимое из загруженного в данный момент UIWebView, используя его метод stringByEvaluatingJavascriptFromString: , как таковой:

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString: 
                                         @"document.body.innerHTML"];

Это захватит текущее HTML-содержимое представления с помощью объектной модели документа, проанализирует JavaScript, а затем передать его вам как NSString * HTML.

Другой способ - сначала выполнить ваш запрос программно, а затем загрузить UIWebView из того, что вы запросили. Допустим, вы взяли второй пример выше, где у вас есть NSString * page в результате вызова stringWithContentsOfURL: encoding: error: . Затем вы можете вставить эту строку в веб-представление, используя loadHTMLString: baseURL: , предполагая, что вы также сохранили запрашиваемый вами NSURL:

[yourWebView loadHTMLString:page baseURL:requestURL];

Я не уверен, однако, будет ли это запускать найденный JavaScript на загружаемой странице (название метода loadHTMLString несколько двусмысленно, и в документации об этом мало что говорится).

Для получения дополнительной информации:

215
ответ дан 24 November 2019 в 00:14
поделиться

, если вы хотите извлечь содержимое уже загруженного UIWebView, -stringByEvaluatingJavaScriptFromString. Например:

NSString  *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
91
ответ дан 24 November 2019 в 00:14
поделиться

Читать: -

NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);    

Для изменения: -

html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];
19
ответ дан 24 November 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: