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

 更新时间:2016年3月9日 10:00  点击:2574

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
});

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • 关于JavaScript中name的意义冲突示例介绍

    在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • javascript自定义的addClass()方法

    复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
  • JavaScript中的this关键字使用方法总结

    在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
  • javascript的事件触发器介绍的实现

    事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
  • 详解javascript数组去重问题

    首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
  • ActiveX控件与Javascript之间的交互示例

    1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • 详解JavaScript操作HTML DOM的基本方式

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
  • JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
  • 跟我学习javascript的最新标准ES6

    虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • JavaScript操作URL的相关内容集锦

    ---恢复内容开始---1.location.href.....(1)self.loction.href="http://www.cnblogs.com/url" window.location.href="http://www.cnblogs.com/url" 以上两个用法相同均为在当前页面打开URL页面 (2)this.locati...2015-10-30
  • javascript实现tab切换的四种方法

    tab切换在网页中很常见,故最近总结了4种实现方法。 首先,写出tab的框架,加上最简单的样式,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style> *{ pa...2015-11-08
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • 基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    前言在面向对象的编程范式中,封装都是必不可少的一个概念,而在诸如 Java,C++等传统的面向对象的语言中, 私有成员是实现封装的一个重要途径。但在 JavaScript 中,确没有在语法特性上对私有成员提供支持, 这也使得开发人员使...2015-10-30
  • javascript实现数独解法

    生生把写过的java版改成javascript版,第一次写,很不专业,见谅。唉,我是有多闲。复制代码 代码如下: var Sudoku = { init: function (str) { this.blank = []; this.fixed = []; this.cell =...2015-03-15