美文网首页
聊聊 UIWebView

聊聊 UIWebView

作者: 过眼云烟1102 | 来源:发表于2018-01-26 14:32 被阅读5次

UIWebView是苹果给我们提供展示网页的一种控件。

UIWebView的基本用法

我们一般这样创建并加载一个服务器端的网页:

-(UIWebView*)webview

{

if(!_webview) {

_webview = [[UIWebViewalloc] init];

_webview.scalesPageToFit=YES;

_webview.delegate=self;

NSURL*url =[NSURLURLWithString:self.urlString];

NSURLRequest*request =[NSURLRequestrequestWithURL:url];

        [_webview loadRequest:request];

    }

return_webview;

}

像这样加载一个本地网页:

- (UIWebView*)webView

{

if(!_webView) {

_webView = [[UIWebViewalloc] init];

_webView.scalesPageToFit=YES;

_webView.delegate=self;

NSString*resourcePath = [[[NSBundlemainBundle] bundlePath] stringByAppendingString:@"/LocalWeb"];

NSString*filePath = [resourcePath stringByAppendingPathComponent:@"index.html"];

NSString*htmlstring=[[NSStringalloc] initWithContentsOfFile:filePath  encoding:NSUTF8StringEncodingerror:nil];

[_webView loadHTMLString:htmlstring baseURL:[NSURLfileURLWithPath:resourcePath]];

    }

return_webView;

}

注意:如果是载入本地网页在添加文件夹时应选择 Create folder references,而不是 Create groups 创建所谓的逻辑文件夹。

iOS Native 与 HTML5 之间的交互

Html5的有很多优点,比如开发速度快,app上线也可以随意修改免审核,跨平台,效果也不错。第一次听说这个混合式开发还是在大众点评的一次沙龙视频上,慢慢的,变得越来越流行。Cordova和它的前身PhoneGap,国内的WebViewJavascriptBridge都是很好的混合开发解决方案。如果传递的参数比较简单,功能不复杂的话,不用三方也可以很容易的实现。

Objective-C 调用 JavaScript

可以使用webview调用如下代码:

-(NSString*)stringByEvaluatingJavaScriptFromString:(NSString *)script;

这个方法向UIWebView传递一段需要执行的JavaScript代码最后获取执行结果。

比如做康师傅那个项目时,我需要点击Native的button获取网页上的文字,用来当邮件内容:

//getEmailContent();就是js的方法名

//body就是getEmailContent方法返回的文字信息

NSString* body =[self.webViewstringByEvaluatingJavaScriptFromString:@"getEmailContent();"];

JavaScript 调用 Objective-C

实现点击网页上的按钮,调用原生的方法需要用到webview的一个代理:

1

-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

详细说一下调用流程:

点击按钮要JS发送像这样 yuefan://jump?invitingID=1 的一条协议给 native app,

然后app通过代理收到这个协议,就可以根据协议调用自身的方法了。

举个栗子:

App端

- (BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType

{

    NSURL * url = [request URL];

if([[url scheme]isEqualToString:@"yuefan"]) {

if([[url host]isEqualToString:@"jump"]) {

            ShopDetailViewController * issuedVC = [[ShopDetailViewController alloc] init];

issuedVC.shopID = [[urlvalueForParameter:@"shopID"] intValue];

[self.navigationControllerpushViewController:issuedVCanimated:YES];

        }

    }

returnYES;

}

Html端

测试网页

点击发送

相关文章

网友评论

      本文标题:聊聊 UIWebView

      本文链接:https://www.haomeiwen.com/subject/wvtwaxtx.html