1. iOS开发过程中遇到数据为html的字符串,联想到跟网页有关的UI控件UIWebView,进去浏览所有方法和属性,看到如下方法:
- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
2. 将解析到的html字符串用第二个方法加载到WebView上,网页模式的结果显示在UiWebView上:
[_webView loadHTMLString:_dataModel.html baseURL:nil];// 加载HTML数据至WebView上
3. 数据能够显示在WebView上,但是仔细一看图片并没有按照我们所想的显示;接着我们设置WebView的代理,并实现代理方法如下:
_webView.delegate = self;// 设置代理
- (void)webViewDidFinishLoad:(UIWebView *)webView // 实现WebView数据加载完毕调用的代理方法
4. 接着我们在代理方法中使用第二个方法 JavaScript进行交互操作
[_webView stringByEvaluatingJavaScriptFromString:
@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function ResizeImages() { "
"var myimg,oldwidth;"
"var maxwidth = 395.0;" // UIWebView中显示的图片宽度
"for(i=0;i <document.images.length;i++){"
"myimg = document.images[i];"
"if(myimg.width > maxwidth){"// 图片宽度大于我们设定的最大宽度,才去让图片等比缩放
"oldwidth = myimg.width;"
"myimg.width = maxwidth;"// 在HTML中图片的宽高比固定,只需修改一个
"}"
"}"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"];
[_webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];// 插入上面定义的方法
5. 但是在阅读苹果API的时候,官方说此方法虽然没有弃用,但是最好用 evaluateJavaScript:completionHandler:.
Although this method is not deprecated, best practice is to use the
evaluateJavaScript:completionHandler:
method of the WKWebView
class instead.
6. 此方法是block回调,只需在block中与JavaScript交互即可.(注意: 此方法属于WKWebView,目的在于替换UIWebView,必须引入WebKit框架).