H5和NA(WebView)的交互

  • 时间:
  • 浏览:1

注意:url里边还后能 拼接参数,参数的每个value要在H5里边单独转码,补救特殊符号,&=以及中文.....

对H5稍作解释:

先说Toyun是iOS和Android这两边在本地要注入的1个多多 对象【参考下面iOS的代码更容易明白】,充当原生应用和web页面之间的1个多多 桥梁。页面上定义了1个多多 按钮名字分别为CallCamera和Share。

点击CallCamera会调用Toyun最终桥梁对象的法律措施:callCamera()。而点击Share会先调用本文件中的javascript法律措施callShared(),这里将要分享的内容格式转为Json字符串格式,后来再调用Toyun最终桥梁对象的法律措施: (void)share:(NSString *)shareInfo法律措施你是什么 是有传参的,参数为shareInfo。

而下面的1个多多 法律措施为原生法律措施调用后的回调法律措施,其中picCallback为获取图片成功的回调法律措施,后来传回拿到的图片photos;shareCallback为分享成功的回调法律措施。

使用stringByEvaluatingJavaScriptFromString,直接调用H5的函数名字,参数的json字符串:

同类:

H5代码:

}

return YES;

}

H5的url里边每个value要单独进行encodeURIComponent的转码,完后 再拼接成toyun://callCamera?key1=value1,比如:encodeURIComponent(value1)。

window.location.href这里是改变主窗口的指向从而马上发出1个多多 链接为Toyun://callCamera请求,而我我想要传给原生应用的参数也可已包含到此请求中,而在iOS法律措施中大伙儿儿要拦截你是什么 请求,根据请求内容去判断JavaStript我我想要做的事情,从而实现web页面和本地应用之间的交互

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

{

NSString *url = request.URL.absoluteString;

if ([url rangeOfString:@"toyun://"].location != NSNotFound) {

IOS:

JSContext:给JavaScript提供运行的上下文环境

JSValue:JavaScript和Objective-C数据和法律措施的桥梁

凡事加带了JSExport协议的协议,所规定的法律措施变量等,就会对js开放,大伙儿儿还后能 通过JSContext调用到。

自定义JSObjcDelegate协议,后来此协议时要遵守JSExport你是什么 协议,自定义协议中的法律措施却说暴露给web页面的法律措施:callCamera和share法律措施。

self.jsContext[@"Toyun"] = self;即把self赋值为名为Toyun的桥梁对象,则H5里边调用Toyun对象法律措施,即为此viewController处的法律措施。

在JavaStript调用完本地应用的法律措施做完相对应的事情完后 ,又回调了JavaStript中对应的法律措施,从而实现了web页面和本地应用之间的通讯。