Objective-C与JavaScript的简易交互操作

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  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框架).


你可能感兴趣的:(iOS简易总结)