开发当中遇见一个问题:
获取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";