使用JavaScript脚本判断页面是否在微信中被打开


Posted in Javascript onMarch 06, 2016

1、根据User-Agent判断

// Js获取User-Agent 
window.navigator.userAgent 
 
if(window.navigator.userAgent.match(/MicroMessenger/i) == "micromessenger") 
 
// Php获取User-Agent 
echo $_SERVER['HTTP_USER_AGENT']; 
 
if(strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')==true) 
 
// 微信内部打开获取到的User-Agent 
Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; MI 2S Build/LRX22G) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025488 Mobile Safari/533.1 MicroMessenger/6.3.9.48_refecd3e.700 NetType/WIFI Language/zh_CN

 
2、Url地址判断

// 你网页正常的url是 
https://forum.xxx.com/home.php?view=2015 
 
// 使用微信打开会在url后面添加几个参数 
https://forum.xxx.com/home.php?view=2015&from=timeline&isappinstalled=0

 
3、使用weixin-web-js判断是否是微信

! function(a, b) {
  "function" == typeof define && (define.amd || define.cmd) ? define(function() {
    return b(a)
  }) : b(a, !0)
}(this, function(a, b) {
  function c(b, c, d) {
    a.WeixinJSBridge ? WeixinJSBridge.invoke(b, e(c), function(a) {
      g(b, a, d)
    }) : j(b, d)
  }

  function d(b, c, d) {
    a.WeixinJSBridge ? WeixinJSBridge.on(b, function(a) {
      d && d.trigger && d.trigger(a), g(b, a, c)
    }) : d ? j(b, d) : j(b, c)
  }

  function e(a) {
    return a = a || {}, a.appId = E.appId, a.verifyAppId = E.appId, a.verifySignType = "sha1", a.verifyTimestamp = E.timestamp + "", a.verifyNonceStr = E.nonceStr, a.verifySignature = E.signature, a
  }

  function f(a) {
    return {
      timeStamp: a.timestamp + "",
      nonceStr: a.nonceStr,
      "package": a.package,
      paySign: a.paySign,
      signType: a.signType || "SHA1"
    }
  }

  function g(a, b, c) {
    var d, e, f;
    switch (delete b.err_code, delete b.err_desc, delete b.err_detail, d = b.errMsg, d || (d = b.err_msg, delete b.err_msg, d = h(a, d), b.errMsg = d), c = c || {}, c._complete && (c._complete(b), delete c._complete), d = b.errMsg || "", E.debug && !c.isInnerInvoke && alert(JSON.stringify(b)), e = d.indexOf(":"), f = d.substring(e + 1)) {
      case "ok":
        c.success && c.success(b);
        break;
      case "cancel":
        c.cancel && c.cancel(b);
        break;
      default:
        c.fail && c.fail(b)
    }
    c.complete && c.complete(b)
  }

  function h(a, b) {
    var e, f, c = a,
      d = p[c];
    return d && (c = d), e = "ok", b && (f = b.indexOf(":"), e = b.substring(f + 1), "confirm" == e && (e = "ok"), "failed" == e && (e = "fail"), -1 != e.indexOf("failed_") && (e = e.substring(7)), -1 != e.indexOf("fail_") && (e = e.substring(5)), e = e.replace(/_/g, " "), e = e.toLowerCase(), ("access denied" == e || "no permission to execute" == e) && (e = "permission denied"), "config" == c && "function not exist" == e && (e = "ok"), "" == e && (e = "fail")), b = c + ":" + e
  }

  function i(a) {
    var b, c, d, e;
    if (a) {
      for (b = 0, c = a.length; c > b; ++b) d = a[b], e = o[d], e && (a[b] = e);
      return a
    }
  }

  function j(a, b) {
    if (!(!E.debug || b && b.isInnerInvoke)) {
      var c = p[a];
      c && (a = c), b && b._complete && delete b._complete, console.log('"' + a + '",', b || "")
    }
  }

  function k() {
    0 != D.preVerifyState && (u || v || E.debug || "6.0.2" > z || D.systemType < 0 || A || (A = !0, D.appId = E.appId, D.initTime = C.initEndTime - C.initStartTime, D.preVerifyTime = C.preVerifyEndTime - C.preVerifyStartTime, H.getNetworkType({
      isInnerInvoke: !0,
      success: function(a) {
        var b, c;
        D.networkType = a.networkType, b = "http://open.weixin.qq.com/sdk/report?v=" + D.version + "&o=" + D.preVerifyState + "&s=" + D.systemType + "&c=" + D.clientVersion + "&a=" + D.appId + "&n=" + D.networkType + "&i=" + D.initTime + "&p=" + D.preVerifyTime + "&u=" + D.url, c = new Image, c.src = b
      }
    })))
  }

  function l() {
    return (new Date).getTime()
  }

  function m(b) {
    w && (a.WeixinJSBridge ? b() : q.addEventListener && q.addEventListener("WeixinJSBridgeReady", b, !1))
  }

  function n() {
    H.invoke || (H.invoke = function(b, c, d) {
      a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d)
    }, H.on = function(b, c) {
      a.WeixinJSBridge && WeixinJSBridge.on(b, c)
    })
  }
  var o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H;
  if (!a.jWeixin) return o = {
    config: "preVerifyJSAPI",
    onMenuShareTimeline: "menu:share:timeline",
    onMenuShareAppMessage: "menu:share:appmessage",
    onMenuShareQQ: "menu:share:qq",
    onMenuShareWeibo: "menu:share:weiboApp",
    onMenuShareQZone: "menu:share:QZone",
    previewImage: "imagePreview",
    getLocation: "geoLocation",
    openProductSpecificView: "openProductViewWithPid",
    addCard: "batchAddCard",
    openCard: "batchViewCard",
    chooseWXPay: "getBrandWCPayRequest"
  }, p = function() {
    var b, a = {};
    for (b in o) a[o[b]] = b;
    return a
  }(), q = a.document, r = q.title, s = navigator.userAgent.toLowerCase(), t = navigator.platform.toLowerCase(), u = !(!t.match("mac") && !t.match("win")), v = -1 != s.indexOf("wxdebugger"), w = -1 != s.indexOf("micromessenger"), x = -1 != s.indexOf("android"), y = -1 != s.indexOf("iphone") || -1 != s.indexOf("ipad"), z = function() {
    var a = s.match(/micromessenger\/(\d+\.\d+\.\d+)/) || s.match(/micromessenger\/(\d+\.\d+)/);
    return a ? a[1] : ""
  }(), A = !1, B = !1, C = {
    initStartTime: l(),
    initEndTime: 0,
    preVerifyStartTime: 0,
    preVerifyEndTime: 0
  }, D = {
    version: 1,
    appId: "",
    initTime: 0,
    preVerifyTime: 0,
    networkType: "",
    preVerifyState: 1,
    systemType: y ? 1 : x ? 2 : -1,
    clientVersion: z,
    url: encodeURIComponent(location.href)
  }, E = {}, F = {
    _completes: []
  }, G = {
    state: 0,
    data: {}
  }, m(function() {
    C.initEndTime = l()
  }), H = {
    config: function(a) {
      E = a, j("config", a);
      var b = E.check === !1 ? !1 : !0;
      m(function() {
        var a, d, e;
        if (b) c(o.config, {
          verifyJsApiList: i(E.jsApiList)
        }, function() {
          F._complete = function(a) {
            C.preVerifyEndTime = l(), G.state = 1, G.data = a
          }, F.success = function() {
            D.preVerifyState = 0
          }, F.fail = function(a) {
            F._fail ? F._fail(a) : G.state = -1
          };
          var a = F._completes;
          return a.push(function() {
            k()
          }), F.complete = function() {
            for (var c = 0, d = a.length; d > c; ++c) a[c]();
            F._completes = []
          }, F
        }()), C.preVerifyStartTime = l();
        else {
          for (G.state = 1, a = F._completes, d = 0, e = a.length; e > d; ++d) a[d]();
          F._completes = []
        }
      }), E.beta && n()
    },
    ready: function(a) {
      0 != G.state ? a() : (F._completes.push(a), !w && E.debug && a())
    },
    error: function(a) {
      "6.0.2" > z || B || (B = !0, -1 == G.state ? a(G.data) : F._fail = a)
    },
    checkJsApi: function(a) {
      var b = function(a) {
        var c, d, b = a.checkResult;
        for (c in b) d = p[c], d && (b[d] = b[c], delete b[c]);
        return a
      };
      c("checkJsApi", {
        jsApiList: i(a.jsApiList)
      }, function() {
        return a._complete = function(a) {
          if (x) {
            var c = a.checkResult;
            c && (a.checkResult = JSON.parse(c))
          }
          a = b(a)
        }, a
      }())
    },
    onMenuShareTimeline: function(a) {
      d(o.onMenuShareTimeline, {
        complete: function() {
          c("shareTimeline", {
            title: a.title || r,
            desc: a.title || r,
            img_url: a.imgUrl || "",
            link: a.link || location.href,
            type: a.type || "link",
            data_url: a.dataUrl || ""
          }, a)
        }
      }, a)
    },
    onMenuShareAppMessage: function(a) {
      d(o.onMenuShareAppMessage, {
        complete: function() {
          c("sendAppMessage", {
            title: a.title || r,
            desc: a.desc || "",
            link: a.link || location.href,
            img_url: a.imgUrl || "",
            type: a.type || "link",
            data_url: a.dataUrl || ""
          }, a)
        }
      }, a)
    },
    onMenuShareQQ: function(a) {
      d(o.onMenuShareQQ, {
        complete: function() {
          c("shareQQ", {
            title: a.title || r,
            desc: a.desc || "",
            img_url: a.imgUrl || "",
            link: a.link || location.href
          }, a)
        }
      }, a)
    },
    onMenuShareWeibo: function(a) {
      d(o.onMenuShareWeibo, {
        complete: function() {
          c("shareWeiboApp", {
            title: a.title || r,
            desc: a.desc || "",
            img_url: a.imgUrl || "",
            link: a.link || location.href
          }, a)
        }
      }, a)
    },
    onMenuShareQZone: function(a) {
      d(o.onMenuShareQZone, {
        complete: function() {
          c("shareQZone", {
            title: a.title || r,
            desc: a.desc || "",
            img_url: a.imgUrl || "",
            link: a.link || location.href
          }, a)
        }
      }, a)
    },
    startRecord: function(a) {
      c("startRecord", {}, a)
    },
    stopRecord: function(a) {
      c("stopRecord", {}, a)
    },
    onVoiceRecordEnd: function(a) {
      d("onVoiceRecordEnd", a)
    },
    playVoice: function(a) {
      c("playVoice", {
        localId: a.localId
      }, a)
    },
    pauseVoice: function(a) {
      c("pauseVoice", {
        localId: a.localId
      }, a)
    },
    stopVoice: function(a) {
      c("stopVoice", {
        localId: a.localId
      }, a)
    },
    onVoicePlayEnd: function(a) {
      d("onVoicePlayEnd", a)
    },
    uploadVoice: function(a) {
      c("uploadVoice", {
        localId: a.localId,
        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
      }, a)
    },
    downloadVoice: function(a) {
      c("downloadVoice", {
        serverId: a.serverId,
        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
      }, a)
    },
    translateVoice: function(a) {
      c("translateVoice", {
        localId: a.localId,
        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
      }, a)
    },
    chooseImage: function(a) {
      c("chooseImage", {
        scene: "1|2",
        count: a.count || 9,
        sizeType: a.sizeType || ["original", "compressed"],
        sourceType: a.sourceType || ["album", "camera"]
      }, function() {
        return a._complete = function(a) {
          if (x) {
            var b = a.localIds;
            b && (a.localIds = JSON.parse(b))
          }
        }, a
      }())
    },
    previewImage: function(a) {
      c(o.previewImage, {
        current: a.current,
        urls: a.urls
      }, a)
    },
    uploadImage: function(a) {
      c("uploadImage", {
        localId: a.localId,
        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
      }, a)
    },
    downloadImage: function(a) {
      c("downloadImage", {
        serverId: a.serverId,
        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
      }, a)
    },
    getNetworkType: function(a) {
      var b = function(a) {
        var c, d, e, b = a.errMsg;
        if (a.errMsg = "getNetworkType:ok", c = a.subtype, delete a.subtype, c) a.networkType = c;
        else switch (d = b.indexOf(":"), e = b.substring(d + 1)) {
          case "wifi":
          case "edge":
          case "wwan":
            a.networkType = e;
            break;
          default:
            a.errMsg = "getNetworkType:fail"
        }
        return a
      };
      c("getNetworkType", {}, function() {
        return a._complete = function(a) {
          a = b(a)
        }, a
      }())
    },
    openLocation: function(a) {
      c("openLocation", {
        latitude: a.latitude,
        longitude: a.longitude,
        name: a.name || "",
        address: a.address || "",
        scale: a.scale || 28,
        infoUrl: a.infoUrl || ""
      }, a)
    },
    getLocation: function(a) {
      a = a || {}, c(o.getLocation, {
        type: a.type || "wgs84"
      }, function() {
        return a._complete = function(a) {
          delete a.type
        }, a
      }())
    },
    hideOptionMenu: function(a) {
      c("hideOptionMenu", {}, a)
    },
    showOptionMenu: function(a) {
      c("showOptionMenu", {}, a)
    },
    closeWindow: function(a) {
      a = a || {}, c("closeWindow", {}, a)
    },
    hideMenuItems: function(a) {
      c("hideMenuItems", {
        menuList: a.menuList
      }, a)
    },
    showMenuItems: function(a) {
      c("showMenuItems", {
        menuList: a.menuList
      }, a)
    },
    hideAllNonBaseMenuItem: function(a) {
      c("hideAllNonBaseMenuItem", {}, a)
    },
    showAllNonBaseMenuItem: function(a) {
      c("showAllNonBaseMenuItem", {}, a)
    },
    scanQRCode: function(a) {
      a = a || {}, c("scanQRCode", {
        needResult: a.needResult || 0,
        scanType: a.scanType || ["qrCode", "barCode"]
      }, function() {
        return a._complete = function(a) {
          var b, c;
          y && (b = a.resultStr, b && (c = JSON.parse(b), a.resultStr = c && c.scan_code && c.scan_code.scan_result))
        }, a
      }())
    },
    openProductSpecificView: function(a) {
      c(o.openProductSpecificView, {
        pid: a.productId,
        view_type: a.viewType || 0,
        ext_info: a.extInfo
      }, a)
    },
    addCard: function(a) {
      var e, f, g, h, b = a.cardList,
        d = [];
      for (e = 0, f = b.length; f > e; ++e) g = b[e], h = {
        card_id: g.cardId,
        card_ext: g.cardExt
      }, d.push(h);
      c(o.addCard, {
        card_list: d
      }, function() {
        return a._complete = function(a) {
          var c, d, e, b = a.card_list;
          if (b) {
            for (b = JSON.parse(b), c = 0, d = b.length; d > c; ++c) e = b[c], e.cardId = e.card_id, e.cardExt = e.card_ext, e.isSuccess = e.is_succ ? !0 : !1, delete e.card_id, delete e.card_ext, delete e.is_succ;
            a.cardList = b, delete a.card_list
          }
        }, a
      }())
    },
    chooseCard: function(a) {
      c("chooseCard", {
        app_id: E.appId,
        location_id: a.shopId || "",
        sign_type: a.signType || "SHA1",
        card_id: a.cardId || "",
        card_type: a.cardType || "",
        card_sign: a.cardSign,
        time_stamp: a.timestamp + "",
        nonce_str: a.nonceStr
      }, function() {
        return a._complete = function(a) {
          a.cardList = a.choose_card_info, delete a.choose_card_info
        }, a
      }())
    },
    openCard: function(a) {
      var e, f, g, h, b = a.cardList,
        d = [];
      for (e = 0, f = b.length; f > e; ++e) g = b[e], h = {
        card_id: g.cardId,
        code: g.code
      }, d.push(h);
      c(o.openCard, {
        card_list: d
      }, a)
    },
    chooseWXPay: function(a) {
      c(o.chooseWXPay, f(a), a)
    }
  }, b && (a.wx = a.jWeixin = H), H
});
Javascript 相关文章推荐
JavaScript 学习笔记(十二) dom
Jan 21 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
Jul 20 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
jquery密码强度校验
Dec 02 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
May 10 Javascript
AngularJs bootstrap详解及示例代码
Sep 01 Javascript
HTML5 canvas 9绘制图片实例详解
Sep 06 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
Apr 24 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
JavaScript实现随机点名器
Mar 25 Javascript
vue路由切换时取消之前的所有请求操作
Sep 01 Javascript
JavaScript实现图片滑动切换的代码示例分享
Mar 06 #Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
Mar 06 #Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 #Javascript
JavaScript模拟数组合并concat
Mar 06 #Javascript
JavaScript模拟push
Mar 06 #Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 #Javascript
Node.js模块封装及使用方法
Mar 06 #Javascript
You might like
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
is_file和file_exists效率比较
2021/03/14 PHP
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
物控部经理职务说明书
2014/02/25 职场文书
小班下学期评语
2014/05/04 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
贫困证明书范文
2015/06/16 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
Django中celery的使用项目实例
2022/07/07 Python