你的位置:首页 > 软件开发 > 操作系统 > App Webview与内嵌web交互实现

App Webview与内嵌web交互实现

发布时间:2015-10-16 00:00:03
需求: 公司一App项目中内嵌了通过web实现的功能,随着功能的不断扩展,内嵌的web界面需要调用App的相关信息或者通过APP去实现功能,所以才研究了一下APP的WebView如何与内嵌的网页交互。 理清需求之后,个人比较懒,就看看别人是不是已经实现了。 ...

  需求:

  公司一App项目中内嵌了通过web实现的功能,随着功能的不断扩展,内嵌的web界面需要调用App的相关信息或者通过APP去实现功能,所以才研究了一下APP的WebView如何与内嵌的网页交互。

 

   理清需求之后,个人比较懒,就看看别人是不是已经实现了。比较幸运,果然有个IOS与Web的实现方法,感觉很不错,参考网址是:http://ramkulkarni.com/blog/calling-objective-c-function-from-javascript-in-ios-applications/,绝对是个大牛,老外。

   实现的逻辑大体是这样的,APP的webview可以拦截请求的链接地址,通过与内嵌界面约定请求前缀(如:webjs2app://),后接请求内容。

   请求内容如下:

   {"functionName":"sayHello',"args":["haha"],"success":"onSuccess","error":"onError"}

   是一个Json字串,包括信息有调用的App接口方法名、传的参数、调用成功后回调的js方法名,调用失败后回调的js方法名。抽象的很到位,可以做到通用。

 

   最终web请求接口地址如:webjs2app://{"functionname":"sayHello',"args":["haha"],"success":"onSuccess","error":"onError"},App webview收到由webjs2app://打头的请求地址时,就会把后面的请求内容解析出来。。。上代码。

 

 

      刚刚链接里面已经有IOS和Web的代码了,并且说明的明白。我这里补充一下Android端对应的实现。

     第一步,重写一下 shouldOverrideUrlLoading,拦截约定的请求。 

    private String protocolPrefix = "webjs2app://";  //这个前缀要用小写,因为webview会自动将请求协议类型转成小写的。

 

   mWebView.setWebViewClient(new WebViewClient() {

     @Override

原标题:App Webview与内嵌web交互实现

关键词:web

web
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。