混合app开发,h5页面调用ios原生APP的接口

Posted lengyue0030

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混合app开发,h5页面调用ios原生APP的接口相关的知识,希望对你有一定的参考价值。

  混合APP开发中,前端开发H5页面,不免会把兼容性拉进来,在做页面的兼容性同事,会与原生app产生一些数据交互;

  混合APP开发,安卓的兼容性倒是好说,安卓使用是chrome浏览器核心,已经很好兼容H5页面,而且运行机制也是能够同步运行;但ios上就没那么容易了;、

在此我就不说兼容安卓的问题,只把ios问题说说;

问题1:H5调用ios接口,ios需要初始化,js代码在ISO上只运行一次

解决:

  本人使用是angular框架搭建的H5页面

var ua = navigator.userAgent.toLowerCase();
        if (/iphone|ipad|ipod/.test(ua)) {
            $rootScope.$on("$locationChangeSuccess",function(){
                parent.location.reload();
            })
        }

意思就是每一次hH5页面加载成功就让其刷新一次;

问题2:ios初始化只执一次,这是由于ios本身内部机制问题;ios执行代码执行一次就储存在缓存中,但是js需要再次执行,否则功能实现不了;

解绝:ISO初始化只执行一次,这是ios本身机制,无法改变;

  调用其他接口,只能在第一次初始化的函数中执行,也就是说每个js文件只能有一个ios初始化,其他有关需要初始化操作的东西都要写在初始化函数中;

function connectWebViewjavascriptBridge(callback) {
                if (window.WebViewJavascriptBridge) {
                    callback(WebViewJavascriptBridge)
                } else {
                    document.addEventListener(‘WebViewJavascriptBridgeReady‘, function () {
                        callback(WebViewJavascriptBridge)
                    }, false)
                }
            }
            connectWebViewJavascriptBridge(function(bridge) {

                bridge.init(function (message, responseCallback) {
                    var data = {‘Javascript Responds‘: ‘Wee!‘}
                    responseCallback(data)
                })
                bridge.registerHandler(‘testJavascriptHandler‘, function (data, responseCallback) {
                    var responseData = {‘Javascript Says‘: ‘Right back atcha!‘}
                    responseCallback(responseData)
                })
                bridge.callHandler(‘接口名称‘, {
                    ‘‘: ‘接口名称‘,
                    ‘body‘: {"接口名称": ‘111‘}
                }, function (response) {
                //接口请求来的数据操作   
                })
              $("body").click(function(){
                     bridge.callHandler(‘接口名称‘, {
                        ‘‘: ‘接口名称‘,
                        ‘body‘: {"接口名称": ‘111‘}
                        }, function (response) {
                            //接口请求来的数据操作   
                        })
                    })
            })
        }                    

  包括点击操作请求接口都要放在初始化函数中;

 

以上内容为自己总结,有错敬请指出,谢绝复制转载

以上是关于混合app开发,h5页面调用ios原生APP的接口的主要内容,如果未能解决你的问题,请参考以下文章

ios&h5混合开发项目仿app页面跳转优化

移动web:原生开发打包,嵌入h5页面 webApp:全部都是H5开发的应用 混合APP:使用第三方开发平台从apicloud,appcan,hbuilder等开发,cordova技术打包 原生APP

iOS原生App与H5页面交互笔记

H5原生app混合开发三者比较

如何判断一个APP页面是原生的还是H5页面

iOS原生和H5的相互调用