iOS开发实战小知识点(五)——获取JS meta异常

在开发中遇见一个问题:

获取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系统以下得到neta值为nil。js是可以获取到的,但是调用stringByEvaluatingJavaScriptFromString方法后返回值为nil。

上网查了很多问题,查找的都是stringByEvaluatingJavaScriptFromString在iOS 10一下系统为什么会返回nil。网上说要用JSContext,或者用WKWebVIew获取JS meta的。但是我们项目只用了UIWebVIew。只能试试JSContext,测试也不行,但是这时候把获取JS meta字符串方法换了,竟然可以获取到了。

document.getElementsByTagName("input"),结果为获取所有标签为input的元素。
document.getElementsByName("hobby"),结果为获取属性name="hobby"的元素。

解决办法:更改获取JS meta的方法:

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

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

你可能感兴趣的:(iOS开发实战小知识点(五)——获取JS meta异常)