H5开发中常用的js方法

h5和app之间的webview交互

  • 这是常用的交互方法之一,iOS可以使用WKWebView,安卓可以使用JsBridge,完成常见的交互效果。
function webViewHandler(iosCallback, adrCallback) {
    if (getMobileOperatingSystem() === 'iOS') {
        setupWebViewJavascriptBridge(iosCallback);
    } else if (getMobileOperatingSystem() === 'Android') {
        connectWebViewJavascriptBridge(adrCallback);
    }

    /*获取移动终端的操作系统,mobile*/
    function getMobileOperatingSystem() {
        var userAgent = navigator.userAgent || navigator.vendor || window.opera;
        if (/windows phone/i.test(userAgent)) {
            return "Windows Phone";
        }
        if (/android/i.test(userAgent)) {
            return "Android";
        }
        if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
            return "iOS";
        }
        return "unknown";
    }

    /*设置页面js桥,mobile*/
    function setupWebViewJavascriptBridge(callback) {
        if (window.WebViewJavascriptBridge) {
            return callback(WebViewJavascriptBridge);
        }
        if (window.WVJBCallbacks) {
            return window.WVJBCallbacks.push(callback);
        }
        window.WVJBCallbacks = [callback];
        var WVJBIframe = document.createElement('iframe');
        WVJBIframe.style.display = 'none';
        WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
        document.documentElement.appendChild(WVJBIframe);
        setTimeout(function () {
            document.documentElement.removeChild(WVJBIframe)
        }, 0)
    }

    /*连接页面js桥,mobile*/
    function connectWebViewJavascriptBridge(callback) {
        if (window.WebViewJavascriptBridge) {
            callback(WebViewJavascriptBridge)
        } else {
            document.addEventListener(
                'WebViewJavascriptBridgeReady'
                , function () {
                    callback(WebViewJavascriptBridge)
                },
                false
            );
        }
    }
};
  • 调用方式如下:
webViewHandler(function (bridge) {
    //JsCallAppFuncName是js调用客户端iOS的方法名,params则是h5传给客户端app的参数,appCallbackHander是调用成功后js收到的回调。
    bridge.callHandler('JsCallAppFuncName', {"params": true},callbackAppHander);
    // AppCallJsFuncName是js注册的方法,供客户端iOS调用,callbackJsFunc是调用后js执行的回调
    bridge.registerHandler('AppCallJsFuncName', callbackJsFunc);
}, function (bridge) {
    // 初始化
    bridge.init(function (message, responseCallback) {
        responseCallback({'Javascript Responds': 'Wee!'});
    });
    // 方法参数和ios是一样的,只是Android必须要有初始化过程
    window.WebViewJavascriptBridge.callHandler('JsCallAppFuncName', {'params': true}, function (responseData) {console.log(responseData)});
    bridge.registerHandler('AppCallJsFuncName', callbackJsFunc);
})

获取设备的基本信息和环境

function getMobileInfo() {
        var info = {
            screen: {},
            device: {
                deviceType: 0,
                deviceVal: ''
            },
            env: {
                type: 0,
                value: ''
            }
        };
        // 屏幕大小
        info.screen.width = window.screen.height;
        info.screen.height = window.screen.width;
        // 设备终端
        var sUserAgent = navigator.userAgent.toLowerCase(),
            bIsiOs = (/iPad|iPhone|iPod/.test(sUserAgent) && !window.MSStream),
            bIsAndroid = sUserAgent.match(/android/i) == "android",
            bIsMidp = sUserAgent.match(/midp/i) == "midp",
            bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4",
            bIsUc = sUserAgent.match(/ucweb/i) == "ucweb",
            bIsCE = sUserAgent.match(/windows ce/i) == "windows ce",
            bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile",

            isWeixin = sUserAgent.match(/MicroMessenger/i) == "micromessenger",
            isWeiBo = sUserAgent.match(/WeiBo/i) == "weibo",
            isQQ = sUserAgent.match(/QQ/i) == "qq";
        if (bIsiOs) {
            info.device.deviceType = 1;info.device.deviceVal = 'iOS';
        } else if (bIsAndroid) {
            info.device.deviceType = 2;info.device.deviceVal = 'Android';
        }else if (bIsWM) {
            info.device.deviceType = 3;info.device.deviceVal = 'Windows mobile';
        } else {
            info.device.deviceType = 0;info.device.deviceVal = 'pc';
        }
        // 第三方环境
        if (isWeixin) {
            info.env.type = 1;info.env.value = 'weixin';
        } else if (isWeiBo) {
            info.env.type = 2;info.env.value = 'weibo';
        } else if (isQQ) {
            info.env.type = 3;info.env.value = 'qq';
        } else {
            info.env.type = 0;info.env.value = '其他';
        }
        return info;
    }
  • 返回的是设备屏幕大小,终端类型,以及所处环境(微信,微博,qq)

转载于:https://my.oschina.net/chinahufei/blog/1578106

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值