• 混合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) {
                                //接口请求来的数据操作   
                            })
                        })
                })
            }                    
    

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

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

  • 相关阅读:
    mac上虚拟机:VMWare Fusion, VirtualBox, Parallels Desktop, CrossOver, Veertu
    linux使用其它用户 su
    CentOS7 rc.local开机开法启动
    taskkill
    Make sure that the controller has a parameterless public constructor.
    An Autofac Lifetime Primer
    Controlling Scope and Lifetime
    Instance scope
    Linq的TakeWhile的用法
    Git does not apply deleted files when merging an old branch into the master. How can I tell Git to apply deleted files?
  • 原文地址:https://www.cnblogs.com/lengyue0030/p/6478911.html
Copyright © 2020-2023  润新知