iOS开发iOS开发实战笔记js,oc

iOS webView获取JS某一个标签meta的方法

2017-06-06  本文已影响1007人  Eddiegooo

开发当中遇见一个问题:

获取H5某个meta的值,在iOS 10(包括)系统以上可以正常获取,但是在iOS 10系统以下获取meta值返回为nil。

代码如下:

NSString *js = [NSString stringWithFormat:@"document.getElementsByTagName('meta')['%@']['content']",metaName];
NSString *meta =  [webView stringByEvaluatingJavaScriptFromString:js];

这时候返回值在iOS 10系统以上正常,iOS 10系统以下返回nil。js获取是正确的,但是stringByEvaluatingJavaScriptFromString方法返回值为nil。
解决办法:更改获取JS的方法:

NSString *js = [NSString stringWithFormat:@"document.getElementsByName(\"%@\")[0].content",metaName];

在调用[webView stringByEvaluatingJavaScriptFromString:js]就都能返回正常了。

举个栗子:

//js的标签内容
<meta name="attach_title" content="">
<meta name="attach_url" content="">
//UIWebView获取方法
    NSString *js = @"document.getElementsByName(\"attach_title\")[0].content";
    NSString *attach_title = [self.webView stringByEvaluatingJavaScriptFromString:js];
    
    js = @"document.getElementsByName(\"attach_url\")[0].content";
    NSString *attach_url = [self.webView stringByEvaluatingJavaScriptFromString:js];
//WKWebView的获取方法
- (void)getWKwebViewCenterDic {
    [self.wkWebView evaluateJavaScript:@"document.getElementsByName(\"attach_title\")[0].content" completionHandler:^(id result, NSError * _Nullable error) {
        NSString *attach_title = @"";
        if ([result isKindOfClass:[NSString class]]) {
            attach_title = result;
        }
    }];
    
    [self.wkWebView evaluateJavaScript:@"document.getElementsByName(\"attach_url\")[0].content" completionHandler:^(id result, NSError * _Nullable error) {
        NSString *attach_url = @"";
        if ([result isKindOfClass:[NSString class]]) {
            attach_url = result;
        }
    }];
}

这样就获得了attach_title 和 attach_url 这两个js标签内容了。

获取网页标题:
//获取所有的html

NSString *allHtml = @"document.documentElement.innerHTML";

//获取网页title

NSString *htmlTitle = @"document.title";
上一篇下一篇

猜你喜欢

热点阅读