H5 混合开发(更新中)

1 流行的混合开发方案

基于 WebView UI (JSBridge)

基于 Native UI(ReactNative、weex)

小程序方案(微信、支付宝小程序)

JS通过JSBridge来调用native api,如拍照/扫一扫

2 H5和原生互相调用

2.1 注册全局api

异步情况导致卡顿

传递数据格式不同:面向 Android 只能接受 基本数据 类型数据。面向 IOS 可以接受任意类型数据。

返回值不同:面向 Android 可以直接接收返回值。面向 IOS 没有办法直接获取返回值。

        // H5 调用 Android 方法
        function onAndroidFunction1 (str) {
            window.AndroidJSBridge.androidTestFunction1(str);
        }

        // Android 调用 H5 方法
        window.onFunction = function (str) {
            alert(str);
            return 'onFunction 方法已经调用完成';
        }


        // H5 调用 IOS 方法
        function onIOSFunction1 (str) {
            window.webkit.messageHandlers.IOSTestFunction1.postMessage({
                msg: str
            });
        }

        // IOS 回调 H5 方法
        window.onFunctionIOS = function (str) {
            alert(str);
            return 'onFunctionIOS 方法已经调用完成';
        }

2.2 url scheme

APP中转返回网页

const iframe1 = document.getElementById('iframe1')
        iframe1.onload = () => {
            const content = iframe1.contentWindow.document.body.innerHTML
            console.info('content', content)
        }
        iframe1.src = 'my-app-name://api/getVersion'
        // // URL scheme

        // 封装 JS-bridge:自造协议标准,不用发请求:fn1代表各种功能
        const sdk = {
            invoke(url, data = {}, onSuccess, onError) {
                const iframe = document.createElement('iframe')
                iframe.style.visibility = 'hidden'
                document.body.appendChild(iframe)
                iframe.onload = () => {
                    const content = iframe1.contentWindow.document.body.innerHTML
                    onSuccess(JSON.parse(content))
                    iframe.remove()
                }
                iframe.onerror = () => {
                    onError()
                    iframe.remove()
                }
                iframe.src = `my-app-name://${url}?data=${JSON.stringify(data)}`
            },
            fn1(data, onSuccess, onError) {
                this.invoke('api/fn1', data, onSuccess, onError)
            },
            fn2(data, onSuccess, onError) {
                this.invoke('api/fn2', data, onSuccess, onError)
            },
            fn3(data, onSuccess, onError) {
                this.invoke('api/fn3', data, onSuccess, onError)
            },
        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值