如何使用WKWebView解析网页中的所有链接?

时间:2018-10-28 10:16:50

标签: javascript objective-c objective-c-blocks wkwebview

方法1

我尝试了以下代码:

- (void)parse
{
    [_webView evaluateJavaScript:@"document.getElementsByTagName('a')"
              completionHandler:^(id result, NSError *error){

                  if (error) {

                      NSLog(@"Error: %@", error.description);
                  }
                  else {

                      //...
                  }
              }];
}

我得到了这个错误:

Error Domain=WKErrorDomain Code=5 "JavaScript execution returned a result of an unsupported type" UserInfo={NSLocalizedDescription=JavaScript execution returned a result of an unsupported type}

是否可以直接获取链接数组?我认为它不仅是一个数组,而且可能是DOM的复杂NSDictionary结构。

方法2

然后我尝试了以下代码:

- (void)parse
{
    int length = 0;

    [_webView evaluateJavaScript:@"document.getElementsByTagName('a').length"
              completionHandler:^(id result, NSError *error){

                  if (error) {

                      NSLog(@"Error: %@", error.description);
                  }
                  else {

                      NSString *lengthString = (NSString *)result;

                      NSLog(@"Length String: %@", lengthString);

                      __block length = (int)[lengthString intValue];
                  }
              }];

    NSLog(@"Length: %d", length);
}

我得到了这个警告:

Type specifier missing, defaults to 'int'

使用此日志:

Length String: 242
Length: 0

此后,我计划使用此JS代码解析每个链接:

document.getElementsByTagName('a')[i].href

如何从块内部正确分配长度变量?

0 个答案:

没有答案