美文网首页
H5唤起App,JS完整dome,代码灵活自己想怎么改就怎么改。

H5唤起App,JS完整dome,代码灵活自己想怎么改就怎么改。

作者: 丨ChenSir丨 | 来源:发表于2019-05-23 16:06 被阅读0次

    前端调用js:

    <script>

            //ios scheme启动地址

            iosAppUrl = "";

            //安卓 scheme启动地址

            androidAppUrl = "";

            //AppStore下载地址

            iosAppStore = "";

            //安卓apk下载地址

            androidApk = ""

            //应用宝下载地址

            appQQ = "";

    </script>

    js代码:

    /** * 启动ios APP地址 */

    var iosAppUrl = "";

    /** * 启动安卓 APP地址 */

    var androidAppUrl = "";

    /** * AppStore下载地址 */

    var iosAppStore = "";

    /** * 安卓安装包下载地址 */

    var androidApk = "";

    /** * QQ应用宝 */

    var appQQ = "";

    /**

    * 移动终端浏览器版本信息

    * @method detectVersion 版本检测

    * @return {返回值类型} isAndroid, isIOS, isIOS9 true或false

    */

    function infoMore() {

        var browser = {

            versions: function () {

                var u = navigator.userAgent,

                    app = navigator.appVersion;

                return { //移动终端浏览器版本信息

                    weixin: u.match(/MicroMessenger/i) == 'MicroMessenger',//是否为微信浏览器

                    trident: u.indexOf('Trident') > -1, //IE内核

                    presto: u.indexOf('Presto') > -1, //opera内核

                    webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核

                    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核

                    mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端

                    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端

                    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器

                    iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器

                    iPad: u.indexOf('iPad') > -1, //是否iPad

                    webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部

                    // qq: u.match(/\sQQ/i) !== null, //是否QQ

                    //Safari: u.indexOf('Safari') > -1,//Safari浏览器,

                };

            }(),

            language: (navigator.browserLanguage || navigator.language).toLowerCase()

        }

        if (browser.versions.weixin && browser.versions.android) { //微信安卓

            alert("微信安卓");

            openApp(androidAppUrl, androidApk)

        }

        else if (browser.versions.android && browser.versions.webKit) { //安卓

            alert("安卓");

            openApp(androidAppUrl, androidApk)

        }

        else if (browser.versions.weixin && (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad)) { //微信IOS

            alert("微信IOS");

            openApp(iosAppUrl, iosAppStore)

        }

        else if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) { //IOS

            alert("IOS");

            openApp(iosAppUrl, iosAppStore)

        }

    }

    /**

    * 版本检测

    * @method detectVersion 版本检测

    * @return {返回值类型} isAndroid, isIOS, isIOS9 true或false

    */

    function detectVersion() {

        let isAndroid, isIOS, isIOS9, version,

            u = navigator.userAgent,

            ua = u.toLowerCase();

        if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {  //android终端或者uc浏览器

            //Android系统

            isAndroid = true

        }

        if (ua.indexOf("like mac os x") > 0) {

            //ios

            var regStr_saf = /os [\d._]*/gi;

            var verinfo = ua.match(regStr_saf);

            version = (verinfo + "").replace(/[^0-9|_.]/ig, "").replace(/_/ig, ".");

        }

        var version_str = version + "";

        if (version_str != "undefined" && version_str.length > 0) {

            version = parseInt(version)

            if (version >= 8) {

                // ios9以上

                isIOS9 = true

            }

            else {

                isIOS = true

            }

        }

        return { isAndroid, isIOS, isIOS9 }

    }

    /**

    * 判断手机上是否安装了app,如果安装直接打开url,如果没安装,执行callback

    * @method openApp 打开App

    * @param {参数类型} url 启动app地址

    * @param {参数类型} callback 回调地址app(下载地址)

    * @return {返回值类型} 返回值说明

    */

    function openApp(url, callback) {

        let {isAndroid, isIOS, isIOS9} = detectVersion()

        if (isAndroid || isIOS) {

            var timeout, t = 4000, hasApp = true;

            var openScript = setTimeout(function () {

                if (!hasApp) {

                    callback && (window.location.href = callback);

                }

                document.body.removeChild(ifr);

            }, 5000)

            var t1 = Date.now();

            var ifr = document.createElement("iframe");

            ifr.setAttribute('src', url);

            ifr.setAttribute('style', 'display:none');

            document.body.appendChild(ifr);

            timeout = setTimeout(function () {

                var t2 = Date.now();

                if (t2 - t1 < t + 100) {

                    hasApp = false;

                }

            }, t);

        }

        if (isIOS9) {

            location.href = url;

            setTimeout(function () {

                callback && (window.location.href = callback);

            }, 250);

            setTimeout(function () {

                location.reload();

            }, 1000);

        }

    }

    相关文章

      网友评论

          本文标题:H5唤起App,JS完整dome,代码灵活自己想怎么改就怎么改。

          本文链接:https://www.haomeiwen.com/subject/wslbzqtx.html