UIWebView stringByEvaluatingJavaScriptFromString - PullRequest
       6

UIWebView stringByEvaluatingJavaScriptFromString

10 голосов
/ 30 декабря 2010

Я застрял на том, чтобы заставить некоторые довольно простые JS работать в моем UIWebView.В делегате веб-представления у меня есть:

- (void)webViewDidFinishLoad:(UIWebView *)wView {
    NSString *someHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('box')[0]"];   
    NSString *allHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
    NSLog(@"someHTML: %@", someHTML);
    NSLog(@"allHTML: %@", allHTML);
}

, но когда метод вызывается, someHTML имеет значение nil, а allHTML содержит все тело HTML в веб-представлении.запустите JS в консоли Safari JS, и он отлично работает (он находит div класса 'box', поэтому я знаю, что он есть в HTML)

Есть предложения?

Подробнее

FWIW, результат в каждом из следующих значений также равен nil

NSString *result = [self.webView stringByEvaluatingJavaScriptFromString: @"document"];
NSLog (@"1. result: %@", result); //should log the document object?

result = [self.webView stringByEvaluatingJavaScriptFromString: @"document.body"];
NSLog (@"2. result: %@", result); //should log the document body

result = [self.webView stringByEvaluatingJavaScriptFromString: @"document.body.getElementsByClassName"];
NSLog (@"3. result: %@", result); //should log a function

result = [self.webView stringByEvaluatingJavaScriptFromString: @"document.body.getElementsByClassName('box')[0]"];
NSLog (@"4. result: %@", result); //should log the node

1 Ответ

20 голосов
/ 30 декабря 2010

Изменение

NSString *someHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('box')[0]"];   

на

NSString *someHTML = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('box')[0].innerHTML;"];   

(добавлено .innerHTML)

имеет все значение в мире.,,

...