zoukankan      html  css  js  c++  java
  • hybrid小了解

    hybrid文字解释

    • hybrid即 “混合” ,前端和客户端混合开发
    • 需要前端和客户端的人员配合完成
    • 某些环节也可能涉及到server端

    hybrid存在价值

    • 快速更新迭代,不需要app审核
    • 减少开发和沟通成本,双端公用一套代码(基本上)
    • 体验流畅,和原生差别不大

    hybrid和h5的区别

    • hybrid和h5相比,开发成本和运维成本比较高,需要客户端和服务端的配合
    • hybrid的速度比h5快,但成本更高
    • h5成本比较低,但速度较慢

    hybrid具体实现

    • 前端写好的html,css,js代码放入服务端,由客户端通过服务端下载到本地。
    • 通过file协议,从本地获取代码,速度很快
    • 并通过webview展示出来(webview是app的一个组件,可有可无,相当于一个小型浏览器内核)

    hybrid更新流程

    • 前端写好前端代码,打包压缩后,带上版本号,放到服务端。
    • 客户端每次启动,判断版本号是否更新,若更新,则到服务端获取最新的前端代码,否则不更新

    js和客户端的通信

    • 通过schema协议进行通信,和http协议中,通过ajax和jsonp的方式类似。

    以下是schema封装:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>js和客户端的通信</title>
    </head>
    <body>
        <script>
            ;(function(window) {
    
                // 调用 schema 的封装
                function _invoke(action, data, callback) {
                    // 拼接 schema 协议
                    var schema = 'myschema://' + action;
    
                    // 拼接参数
                    schema += '?a=a';
    
                    for (var k in data) {
                        if (data.hasOwnProperty(k)) {
                            schema += '&' +  k + '=' + data[k];
                        }
                    }
    
                    // 处理回调
                    var callbackName = '';
                    if (typeof callback === 'string') {
                        callbackName = callback;
                    } else {
                        callbackName = action + Data.now();
                        // 定义全局函数接收结果
                        window[callbackName] = callback;
                    }
                    schema += '&callback=' + callbackName;
    
                    // 创建元素插入通过schema获取到的内容
                    var iframe = document.createElement('iframe');
                    iframe.style.display = 'none';
                    iframe.src = schema;
                    document.body.appendChild(iframe);
                    setTimeout(function() {
                        document.body.removeChild(iframe);
                        iframe = null;
                    })
    
                }
    
                function invokeShare(data, callback) {
                    _invoke('share', data, callback)
                }
                function invokeScan(data, callback) {
                    _invoke('scan', data, callback)
                }
                function invokeLogin(data, callback) {
                    _invoke('login', data, callback)
                }
    
                // 暴露到全局变量
                window.invoke = {
                    share: invokeShare,
                    scan: invokeScan,
                    login: invokeLogin // 
                }
    
            })(window);
    
                window.invoke.share({
                    title: 'xxx',
                    content: 'yyy'
                }, function(result) {
                    console.log(result);
                })
        </script>
    </body>
    </html>
  • 相关阅读:
    js-jquery-003-条形码-二维码【QR码】
    js-jquery-002-条形码-一维码
    js-jquery-001-条形码概述
    java-mybaits-00401-Mapper-输入输出
    tools-eclipse-002-常用插件
    java-mybaits-00301-SqlMapConfig
    java-mybaits-00203-DAO-mapper代理开发方法,多参数【推荐】
    java-mybaits-00202-DAO-原始DAO开发方法
    java-mybaits-00201-DAO-SqlSession使用范围
    java-mybaits-00103-入门程序原生的【查、增、删、改】
  • 原文地址:https://www.cnblogs.com/zhonghonglin1997/p/10687038.html
Copyright © 2011-2022 走看看