{"id":29591,"date":"2024-11-25T12:52:15","date_gmt":"2024-11-25T04:52:15","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29591\/"},"modified":"2024-11-25T12:52:15","modified_gmt":"2024-11-25T04:52:15","slug":"%e5%be%ae%e4%bf%a1%e4%ba%8c%e7%bb%b4%e7%a0%81%e7%99%bb%e5%bd%95%e4%b8%ad%e7%9a%84js%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29591\/","title":{"rendered":"\u5fae\u4fe1\u4e8c\u7ef4\u7801\u767b\u5f55\u4e2d\u7684JS\u4ee3\u7801\u5206\u6790"},"content":{"rendered":"<p>\u5728\u5f88\u591a\u5730\u65b9\u5c31\u662f\u90fd\u51fa\u73b0\u4e86\u4f7f\u7528\u4e8c\u7ef4\u7801\u767b\u5f55\uff0c\u4e8c\u7ef4\u7801\u4ed8\u6b3e\uff0c\u4e8c\u7ef4\u7801\u8d26\u6237\u7b49\u5e94\u7528(\u8fd9\u91cc\u7684\u4e8c\u7ef4\u7801\u79cd\u9a6c\uff0c\u8bc8\u9a97\u5c31\u4e0d\u8bf4\u4e86)\uff0c\u4e8c\u7ef4\u7801\u9a8c\u8bc1\uff0c\u591a\u7ec8\u7aef\u8f85\u52a9\u6388\u6743\u5e94\u7528\u5f00\u59cb\u591a\u8d77\u6765\uff0c\u8fd9\u91cc\u5148\u8bf4\u4e0b\u5565\u662f\u4e8c\u7ef4\u7801\uff0c\u5176\u5b9e\u4e8c\u7ef4\u7801\u5c31\u662f\u5b58\u4e86\u4e8c\u8fdb\u5236\u6570\u636e\u7684\u9ed1\u767d\uff0c\u5f53\u51fa\u73b0\u8981\u6c42\u4e8c\u7ef4\u7801\u767b\u5f55\u7684\u65f6\u5019\uff0c\u670d\u52a1\u5668\u4f1a\u751f\u6210\u4e00\u6761\u4e34\u65f6\u7684\u552f\u4e00\u7684\u4e8c\u7ef4\u7801\u4fe1\u606f\uff0c\u53d1\u9001\u5230\u5ba2\u6237\u7aef\u4ee5\u4e8c\u7ef4\u7801(\u56fe\u7247)\u7684\u5f62\u5f0f\u5199\u5165\u5230\u7f51\u9875\uff0c\u7136\u540e\u4f60\u5c31\u4f1a\u770b\u5230\u7edf\u4e00\u7684\u56db\u4e2a\u65b9\u5f62\u7684\u4e8c\u7ef4\u7801\uff0c\u5982\u679c\u505a\u7684\u597d\u8fd9\u4e2a\u4e8c\u7ef4\u7801\u4fe1\u606f\u5e94\u8be5\u662f\u6709\u65f6\u6548\u7684\uff0c\u8fd9\u91cc\u6682\u4e14\u4e0d\u8003\u8651\u8fd9\u4e9b\uff0c\u5c31\u7b80\u5355\u7684\u767b\u5f55\u4f5c\u4e3a\u4f8b\u5b50\u770b\u770b\u5427,<\/p>\n<p><span style=\"line-height: 1.76em\">\u9996\u5148\u8bf4\u4e0b\u6574\u4e2a\u6388\u6743\u6d41\u7a0b\uff1a<\/span><\/p>\n<p>\u5728\u5ba2\u6237\u7aef\u7f51\u9875\u4e2d\u4f1a\u4e0d\u65ad\u5411\u670d\u52a1\u5668\u53d1\u9001https\u8fde\u63a5\uff0c\u5e76\u4e14\u8fd9\u91cc\u4f20\u8f93\u5f88\u5c11\u7684\u6570\u636e\u4e4b\u540e\u5c31\u65ad\u5f00\u8fde\u63a5\u4e86\uff0c\u4e0b\u9762\u770b\u4e0b\u5fae\u4fe1\u7f51\u9875\u4e2d\u8fd9\u4e2alogin1c709c.\u6587\u4ef6\uff1a<\/p>\n<pre>(function($,&nbsp;_aoWin)&nbsp;{\r\n_aoWin.QRLogin&nbsp;=&nbsp;{};\r\n&nbsp;&nbsp;_aoWin.LoginLog&nbsp;=&nbsp;\"\";\r\n&nbsp;var&nbsp;_sBaseHost&nbsp;=&nbsp;\"\",\r\n&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg&nbsp;=&nbsp;document.getElementById(\"loginQrCode\");\r\n&nbsp;if&nbsp;(document.domain&nbsp;==&nbsp;\"qq.com\")&nbsp;{\r\n&nbsp;_sBaseHost&nbsp;=&nbsp;\"weixin.qq.com\";\r\n&nbsp;}&nbsp;else&nbsp;if(location.hostname.match(\/(wechat.com)$\/)){\r\n&nbsp;_sBaseHost&nbsp;=&nbsp;\"wechat.com\";\r\n&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;_sBaseHost&nbsp;=&nbsp;\"wechatapp.com\";\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;var&nbsp;show_tip&nbsp;=&nbsp;1,\r\n&nbsp;_sCurUUId,\r\n&nbsp;_oResetTimeout,\r\n&nbsp;&nbsp;&nbsp;&nbsp;_aWebMMCallbacks&nbsp;=&nbsp;[],\r\n&nbsp;&nbsp;&nbsp;&nbsp;_oDetactWebMMInterval&nbsp;=&nbsp;setInterval(function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(_aoWin.WebMM){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(_oDetactWebMMInterval);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;callback;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(callback&nbsp;=&nbsp;_aWebMMCallbacks.shift()){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof(callback)&nbsp;!=&nbsp;\"function\")&nbsp;continue;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;1000);\r\n\r\nfunction&nbsp;_logInPage(_asLog){\r\n&nbsp;&nbsp;&nbsp;&nbsp;_aoWin.LoginLog&nbsp;=&nbsp;LoginLog&nbsp;+&nbsp;_asLog&nbsp;+&nbsp;\"\n\";\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;function&nbsp;_afterLoadWebMMDo(callback){\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(!_aoWin.WebMM){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_aWebMMCallbacks.push(callback);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;function&nbsp;_reportNow(text){\r\n&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(text);\r\n&nbsp;&nbsp;&nbsp;&nbsp;_afterLoadWebMMDo(function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebMM.ossLog({Text:&nbsp;text});\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebMM.flushOssLog();\r\n&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;var&nbsp;reLoadQRImgCount&nbsp;=&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRCodeTime&nbsp;=&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgSucc&nbsp;=&nbsp;function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(loadQRImgWatchDog);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"Load&nbsp;QRCode&nbsp;Success,&nbsp;time=\"&nbsp;+&nbsp;(new&nbsp;Date().getTime()&nbsp;-&nbsp;loadQRCodeTime)&nbsp;+&nbsp;\"ms,&nbsp;reload&nbsp;count:&nbsp;\"&nbsp;+&nbsp;reLoadQRImgCount);\r\n&nbsp;&nbsp;&nbsp;&nbsp;},\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgFail&nbsp;=&nbsp;function(img){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_reportNow(\"Load&nbsp;QRcode&nbsp;fail!\"&nbsp;+&nbsp;status&nbsp;+&nbsp;\",&nbsp;src:&nbsp;\"&nbsp;+&nbsp;img.src&nbsp;+&nbsp;\",&nbsp;time:&nbsp;\"&nbsp;+&nbsp;(new&nbsp;Date().getTime()&nbsp;-&nbsp;loadQRCodeTime)&nbsp;+&nbsp;\"ms\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;},\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgWatchDog&nbsp;=&nbsp;null;\r\n&nbsp;function&nbsp;_loadQRImg(uuid)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;_poll(uuid);\r\n&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"Load&nbsp;QRCode&nbsp;Start\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRCodeTime&nbsp;=&nbsp;new&nbsp;Date().getTime();\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.onload&nbsp;=&nbsp;function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgSucc();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.onload&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;};\r\n&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.onerror&nbsp;=&nbsp;function(){loadQRImgFail(this)};\r\n&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.src&nbsp;=&nbsp;\"https:\/\/login.\"+_sBaseHost+\"\/qrcode\/\"+uuid+\"?t=webwx\";\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgWatchDog&nbsp;=&nbsp;setInterval(function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(reLoadQRImgCount&nbsp;&amp;gt;=&nbsp;5)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_reset();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reLoadQRImgCount++;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_img&nbsp;=&nbsp;new&nbsp;Image();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_img.onload&nbsp;=&nbsp;function&nbsp;()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!_oLoginQrCodeImg.onload)&nbsp;return;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.onload&nbsp;=&nbsp;null;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg.src&nbsp;=&nbsp;this.src;\/\/replace\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadQRImgSucc();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_img.onerror&nbsp;=&nbsp;function(){loadQRImgFail(this)};\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_img.src&nbsp;=&nbsp;_oLoginQrCodeImg.src&nbsp;+&nbsp;\"&amp;amp;r=\"&nbsp;+&nbsp;new&nbsp;Date().getTime();\r\n&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;5000);\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;var&nbsp;_sSecondRequestTime&nbsp;=&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;_nAjaxTimeout&nbsp;=&nbsp;100&nbsp;*&nbsp;1000,\r\n&nbsp;&nbsp;&nbsp;&nbsp;_nNewLoginFuncErrCount&nbsp;=&nbsp;0;\r\n&nbsp;function&nbsp;_poll(_asUUID)&nbsp;{\r\n&nbsp;var&nbsp;_self&nbsp;=&nbsp;arguments.callee,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nTime&nbsp;=&nbsp;0;\r\n&nbsp;_sCurUUId&nbsp;=&nbsp;_asUUID;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"_poll&nbsp;Request&nbsp;Start,&nbsp;time:&nbsp;\"&nbsp;+&nbsp;new&nbsp;Date().getTime());\r\n&nbsp;&nbsp;&nbsp;&nbsp;_nTime&nbsp;=&nbsp;new&nbsp;Date().getTime();\r\n&nbsp;$.ajax({\r\n&nbsp;type:&nbsp;\"GET\",\r\n&nbsp;url:&nbsp;\"https:\/\/login.\"&nbsp;+&nbsp;_sBaseHost&nbsp;+&nbsp;\"\/cgi-bin\/mmwebwx-bin\/login?uuid=\"&nbsp;+&nbsp;_asUUID&nbsp;+&nbsp;\"&amp;amp;tip=\"&nbsp;+&nbsp;show_tip,\r\n&nbsp;dataType:&nbsp;\"script\",\r\n&nbsp;cache:&nbsp;false,\r\n&nbsp;timeout:&nbsp;_nAjaxTimeout,\r\n&nbsp;success:&nbsp;function(data,&nbsp;textStatus,&nbsp;jqXHR)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"_poll&nbsp;Request&nbsp;Success,&nbsp;code:&nbsp;\"&nbsp;+&nbsp;window.code&nbsp;+&nbsp;\",&nbsp;time:&nbsp;\"&nbsp;+&nbsp;(new&nbsp;Date().getTime()&nbsp;-&nbsp;_nTime)&nbsp;+&nbsp;\"ms\");\r\n&nbsp;&nbsp;switch&nbsp;(_aoWin.code)&nbsp;{\r\n&nbsp;&nbsp;case&nbsp;200:\r\n&nbsp;&nbsp;&nbsp;_sSecondRequestTime&nbsp;=&nbsp;new&nbsp;Date().getTime()&nbsp;-&nbsp;_sSecondRequestTime;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"Second&nbsp;Request&nbsp;Success,&nbsp;time:&nbsp;\"&nbsp;+&nbsp;_sSecondRequestTime&nbsp;+&nbsp;\"ms\");\r\n&nbsp;&nbsp;clearTimeout(_oResetTimeout);\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_fNewLoginFunc&nbsp;=&nbsp;function(){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;_aoWin.redirect_uri&nbsp;+&nbsp;\"&amp;amp;fun=new\",\/\/new&nbsp;login&nbsp;page\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;\"GET\",\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:function(msg)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_logInPage(\"new&nbsp;func&nbsp;reponse,&nbsp;reponseMsg:&nbsp;\"&nbsp;+&nbsp;msg);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;code&nbsp;=&nbsp;msg.match(\/&lt;script&gt;(.*)&lt;\/script&gt;\/);\r\n              var skey=msg.match(\/&lt;skey&gt;(.*)&lt;\/skey&gt;\/);\r\n              if(code){\r\n                eval(code[1]);\r\n              }else{\r\n                $(\"#container\").show();\r\n                $(\"#login_container\").hide();\r\n              }\r\n              if(skey &amp;&amp; skey[1]){\r\n               WebMM.model(\"account\").setSkey(skey[1]);\r\n              }\r\n            },\r\n            error:function(jqXHR, textStatus, errorThrown){\r\n              _nNewLoginFuncErrCount++;\r\n              if(_nNewLoginFuncErrCount &gt; 5){\r\n                if(confirm(\"Call new login page func error, refresh?\")){location.reload()}\r\n                return;\r\n              }\r\n              _reportNow(_aoWin.redirect_uri + \" New login page func error: \" + textStatus +\" retryCount:\" + _nNewLoginFuncErrCount);\r\n              setTimeout(_fNewLoginFunc, 500);\r\n            }\r\n          });\r\n        };\r\n        _fNewLoginFunc();\r\n \r\n        _reportNow(\"\/cgi-bin\/mmwebwx-bin\/login, Second Request Success, uuid: \" + _asUUID + \", time: \" + _sSecondRequestTime + \"ms\");\r\n  break;\r\n \r\n  case 201:\r\n        clearTimeout(_oResetTimeout);\r\n  show_tip = 0;\r\n  $(&#039;.errorMsg&#039;).hide();\r\n  $(&#039;.normlDesc&#039;).hide();\r\n  $(&#039;.successMsg&#039;).show();\r\n        _reportNow(\"\/cgi-bin\/mmwebwx-bin\/login, First Request Success, uuid: \" + _asUUID);\r\n        _reportNow(\"\/cgi-bin\/mmwebwx-bin\/login, Second Request Start, uuid: \" + _asUUID);\r\n \r\n        _sSecondRequestTime = new Date().getTime();\r\n \r\n        \/\/_nAjaxTimeout = 5 * 1000;\r\n        _self(_asUUID);\r\n        break;\r\n \r\n  case 408:\r\n  setTimeout(function(){\r\n   _self(_asUUID);\r\n  }, 500);\r\n  break;\r\n \r\n  case 400:\r\n  case 500:\r\n        _reset();\r\n        _afterLoadWebMMDo(function(){\r\n   _aoWin.Log.d(\"500, Login Poll Svr Exception\");\r\n  });\r\n  break;\r\n  }\r\n },\r\n error: function(jqXHR, textStatus, errorThrown) {\r\n  if (textStatus == &#039;timeout&#039;) {\r\n        setTimeout(function(){\r\n          _self(_asUUID);\r\n        }, 500);\r\n  } else {\r\n        setTimeout(function(){\r\n          _self(_asUUID);\r\n        }, 5000);\r\n \r\n        _logInPage(\"_poll Request Error:\" + textStatus);\r\n        _afterLoadWebMMDo(function(){\r\n          _aoWin.Log.e(\"Login Poll Error:\" + textStatus);\r\n        });\r\n  }\r\n }\r\n });\r\n }\r\n\r\nvar getUUIDCount = 0,\r\n    _getUUIDWatchDog,\r\n    _bGetUUIDSuccess = false;\/\/ajax success\u05b4\r\n function _getUUID() {\r\n    getUUIDCount++;\r\n    var _self = arguments.callee,\r\n      _loadError = function(errorText){\r\n        _reportNow(\"Load UUID Error! ErrorText: \" + errorText + \" getUUIDCount=\" + getUUIDCount);\r\n        if(getUUIDCount &gt; 5){\r\n          if (confirm(\"Load uuid error. Refresh?\")) {\r\n            location.reload();\r\n          }\r\n        }\r\n        setTimeout(function(){\r\n          _self();\r\n        }, 500);\r\n      };\r\n \r\n    clearTimeout(_getUUIDWatchDog);\r\n    _getUUIDWatchDog = setTimeout(function(){\r\n      if(!_aoWin.QRLogin.code){\r\n        _logInPage(\"GetUUID Timeout, WatchDog Run\");\r\n        _self();\r\n      }\r\n    }, 10000);\r\n    \r\n        $.ajax({      \r\n          type: \"GET\",      \r\n          url: \"https:\/\/login.\" + _sBaseHost + \"\/jslogin?appid=wx782c26e4c19acffb&amp;redirect_uri=\"+encodeURIComponent(location.protocol+\"\/\/\"+location.host+\"\/cgi-bin\/mmwebwx-bin\/webwxnewloginpage\")+\"&amp;fun=new&amp;lang=\" + document.lang,\r\n           dataType: \"script\",\r\n      cache: false,\r\n      success : function(){\r\n        clearTimeout(_getUUIDWatchDog);\r\n        if(_bGetUUIDSuccess) return;\r\n        if (_aoWin.QRLogin &amp;&amp; _aoWin.QRLogin.code == 200) {\r\n          _logInPage(\"GetUUID Success, UUID=\" + QRLogin.uuid);\r\n          _bGetUUIDSuccess = true;\r\n \r\n          clearTimeout(_oResetTimeout);\r\n          _oResetTimeout = setTimeout(function(){\r\n            location.reload();\/\/Note: Don&#039;t run _reset(). If you run _reset(), there will may have many _poll request, as they get 408 return code\r\n          }, 5 * 60 *1000);\/\/5 mins\r\n \r\n          _loadQRImg(QRLogin.uuid);\r\n        } else {\r\n          var QRLoginCode = (_aoWin.QRLogin &amp;&amp; _aoWin.QRLogin.code) ? _aoWin.QRLogin.code : \"None\";\r\n          _logInPage(\"GetUUID Error, QRLogin.code=\" + QRLoginCode);\r\n          _loadError(\"QRLogin.code= \" + QRLoginCode);\r\n        }\r\n      },\r\n      error : function(xhr, textStatus, errorThrown){\r\n        _logInPage(\"GetUUID Error, textStatus=\" + textStatus);\r\n        _loadError(textStatus);\r\n      }\r\n    });\r\n }\r\n \r\n  function _reset(){\r\n    location.reload();\r\n  }\r\n \r\n if ($(\"#login_container\").is(\":visible\") ) {\r\n    _getUUID();\r\n }\r\n \r\n  \r\n var _bHadLog = false;\r\n function _ossLog() {\r\n if (_bHadLog) return;\r\n _bHadLog = true;\r\n var _sUvid = document.cookie.match(new RegExp( \"(^| )\"+\"webwxuvid\"+\"=([^;]*)(;|$)\"));\r\n    if(!_sUvid || _sUvid.length &lt; 3) return;\r\n    _sUvid = _sUvid[2];\r\n (new Image()).src = \"\/cgi-bin\/mmwebwx-bin\/webwxstatreport?funkey=indexdemo&amp;uvid=\"+_sUvid+\"&amp;uuid=\"+_sCurUUId;\r\n }\r\n \r\n \r\n if($(\"img.guide\").length &gt; 0) {\r\n var _nTimer = 0,\r\n  _oGuide$ = $(\".guide\"),\r\n  _oGuideTrigger$ = $(\"#guideTrigger, #tipTrigger\"),\r\n  _oMask$ = $(\".mask\");\r\n \r\n  function _back() {\r\n  _nTimer = setTimeout(function() {\r\n  _oMask$.stop().animate({opacity:0}, function(){$(\".mask\").hide()});\r\n  _oGuide$.stop().animate({marginLeft:\"-120px\",opacity:0}, \"400\", \"swing\",function(){\r\n   _oGuide$.hide();\r\n  });\r\n  }, 100);\r\n }\r\n \r\n \/*guide*\/\r\n _oGuide$.css({\"left\":\"50%\", \"opacity\":0});\r\n _oGuideTrigger$.css({\"backgroundColor\":\"white\", \"opacity\":\"0\"});\r\n _oGuideTrigger$.mouseover(function(){\r\n  clearTimeout(_nTimer);\r\n  _oMask$.show().stop().animate({\"opacity\":0.2});\r\n  _oGuide$.css(\"display\", \"block\").stop().animate({marginLeft:\"+168px\", opacity:1}, 900, \"swing\", function() {\r\n  _oGuide$.animate({marginLeft:\"+153px\"}, 300);\r\n  });\r\n  _ossLog();\r\n }).mouseout(_back);\r\n \r\n _oGuide$.mouseover(function(){\r\n  clearTimeout(_nTimer);\r\n }).mouseout(_back);\r\n }\r\n})(jQuery, window);&lt;\/script&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u7ec6\u8bfbjs\u4e4b\u540e\uff0c\u4f60\u5c31\u4f1a\u4ece\u7f51\u9875\u5ba2\u6237\u7aef\u8fd9\u8fb9\u770b\u5230\u8bf7\u6c42\u767b\u5f55\u7684\u4e00\u9762\uff0c\u7f51\u9875\u5ba2\u6237\u7aef\u6bcf\u9694500\u6beb\u79d2\u5c31\u5411\u670d\u52a1\u5668\u53d1\u8d77ssl\u8bf7\u6c42\uff0c\u8bf7\u6c42\u5f53\u524d\u7684\u4e8c\u7ef4\u7801\u662f\u5426\u88ab\u5176\u4ed6\u5ba2\u6237\u7aef(\u624b\u673a)\u6388\u6743\uff0c\u5982\u679c\u8fd4\u56de\u7ed3\u679c\u662f201\uff0c\u5c31\u662f\u8bf4\u660e\u5df2\u7ecf\u83b7\u53d6\u626b\u63cf\u4e8c\u7ef4\u7801\u7ec8\u7aef\u76f8\u540c\u7684\u8d26\u53f7\u767b\u5f55\u6388\u6743\uff0c\u5982\u679c\u662f\u5176\u4ed6\u60c5\u51b5\u5c31\u518d\u9694500\u6beb\u79d2\u518d\u53d1\u8bf7\u6c42\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u4f1a\u4e00\u76f4\u6301\u7eed\u5230\u4e8c\u7ef4\u7801\u88ab\u626b\u63cf\u901a\u8fc7\u6216\u8005\u4e8c\u7ef4\u7801\u8d85\u65f6(\u5931\u6548)\u4e3a\u6b62\u3002<br \/>&nbsp;\u5176\u4e2d\u4f7f\u7528\u7684\u5de5\u5177\u6709\uff1a \u6293\u5305\u5de5\u5177 Fidller \uff0cChrome F12\u5f00\u53d1\u4eba\u5458\u5de5\u5177\uff0c\u6ce8\u610f\u5076\u7136\u7684\u53d1\u73b0\uff0c\u5fae\u4fe1\u7684\u5ba2\u6237\u7aef\u6709\u4e00\u4e2amin-webmm1cba21.js \uff0c\u5176\u4e2d\u6e05\u6670\u53ef\u89c1\u7684XSS filter\u89c4\u8303\u3002<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u4e8c\u7ef4\u7801\u767b\u5f55\u4e2d\u7684JS\u4ee3\u7801\u5206\u6790\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u5f88\u591a\u5730\u65b9\u5c31\u662f\u90fd\u51fa\u73b0\u4e86\u4f7f\u7528\u4e8c\u7ef4\u7801\u767b\u5f55\uff0c\u4e8c\u7ef4\u7801\u4ed8\u6b3e\uff0c\u4e8c\u7ef4\u7801\u8d26\u6237\u7b49\u5e94\u7528(\u8fd9\u91cc\u7684\u4e8c\u7ef4\u7801\u79cd\u9a6c\uff0c\u8bc8\u9a97\u5c31\u4e0d\u8bf4\u4e86)\uff0c\u4e8c\u7ef4\u7801\u9a8c\u8bc1\uff0c\u591a\u7ec8\u7aef\u8f85\u52a9\u6388\u6743\u5e94\u7528\u5f00\u59cb\u591a\u8d77\u6765\uff0c\u8fd9\u91cc\u5148\u8bf4\u4e0b\u5565\u662f\u4e8c\u7ef4\u7801\uff0c\u5176\u5b9e\u4e8c\u7ef4\u7801\u5c31\u662f\u5b58\u4e86\u4e8c\u8fdb\u5236\u6570\u636e\u7684\u9ed1\u767d\uff0c\u5f53\u51fa\u73b0\u8981\u6c42\u4e8c\u7ef4\u7801\u767b\u5f55\u7684\u65f6\u5019\uff0c\u670d\u52a1\u5668\u4f1a\u751f\u6210\u4e00\u6761\u4e34\u65f6\u7684\u552f\u4e00\u7684\u4e8c\u7ef4\u7801\u4fe1\u606f\uff0c\u53d1\u9001\u5230\u5ba2\u6237\u7aef\u4ee5\u4e8c\u7ef4\u7801(\u56fe\u7247)\u7684\u5f62\u5f0f\u5199\u5165\u5230\u7f51\u9875\uff0c\u7136\u540e\u4f60\u5c31\u4f1a\u770b\u5230\u7edf\u4e00\u7684\u56db\u4e2a\u65b9\u5f62\u7684\u4e8c\u7ef4\u7801\uff0c\u5982\u679c\u505a\u7684\u597d\u8fd9\u4e2a\u4e8c\u7ef4\u7801\u4fe1\u606f\u5e94\u8be5\u662f\u6709\u65f6\u6548\u7684\uff0c\u8fd9\u91cc\u6682\u4e14\u4e0d\u8003\u8651\u8fd9\u4e9b\uff0c\u5c31\u7b80\u5355\u7684\u767b\u5f55\u4f5c\u4e3a\u4f8b\u5b50\u770b\u770b\u5427, \u9996\u5148\u8bf4\u4e0b\u6574\u4e2a\u6388\u6743\u6d41\u7a0b\uff1a \u5728\u5ba2\u6237\u7aef\u7f51\u9875\u4e2d\u4f1a\u4e0d\u65ad\u5411\u670d\u52a1\u5668\u53d1\u9001https\u8fde\u63a5\uff0c\u5e76\u4e14\u8fd9\u91cc\u4f20\u8f93\u5f88\u5c11\u7684\u6570\u636e\u4e4b\u540e\u5c31\u65ad\u5f00\u8fde\u63a5\u4e86\uff0c\u4e0b\u9762\u770b\u4e0b\u5fae\u4fe1\u7f51\u9875\u4e2d\u8fd9\u4e2alogin1c709c.\u6587\u4ef6\uff1a (function($,&nbsp;_aoWin)&nbsp;{ _aoWin.QRLogin&nbsp;=&nbsp;{}; &nbsp;&nbsp;_aoWin.LoginLog&nbsp;=&nbsp;&#8220;&#8221;; &nbsp;var&nbsp;_sBaseHost&nbsp;=&nbsp;&#8220;&#8221;, &nbsp;&nbsp;&nbsp;&nbsp;_oLoginQrCodeImg&nbsp;=&nbsp;document.getElementById(&#8220;loginQrCode&#8221;); &nbsp;if&nbsp;(document.domain&nbsp;==&nbsp;&#8220;qq.com&#8221;)&nbsp;{ &nbsp;_sBaseHost&nbsp;=&nbsp;&#8220;weixin.qq.com&#8221;; &nbsp;}&nbsp;else&nbsp;if(location.hostname.match(\/(wechat.com)$\/)){ &nbsp;_sBaseHost&nbsp;=&nbsp;&#8220;wechat.com&#8221;; &nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;_sBaseHost&nbsp;=&nbsp;&#8220;wechatapp.com&#8221;; &nbsp;&nbsp;} &nbsp; &nbsp;var&nbsp;show_tip&nbsp;=&nbsp;1, &nbsp;_sCurUUId, &nbsp;_oResetTimeout, &nbsp;&nbsp;&nbsp;&nbsp;_aWebMMCallbacks&nbsp;=&nbsp;[], &nbsp;&nbsp;&nbsp;&nbsp;_oDetactWebMMInterval&nbsp;=&nbsp;setInterval(function(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(_aoWin.WebMM){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(_oDetactWebMMInterval); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;callback; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(callback&nbsp;=&nbsp;_aWebMMCallbacks.shift()){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof(callback)&nbsp;!=&nbsp;&#8220;function&#8221;)&nbsp;continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;1000); function&nbsp;_logInPage(_asLog){ &nbsp;&nbsp;&nbsp;&nbsp;_aoWin.LoginLog&nbsp;=&nbsp;LoginLog&nbsp;+&nbsp;_asLog&nbsp;+&nbsp;&#8221; &#8220;; &nbsp;&nbsp;} &nbsp; &nbsp;&nbsp;function&nbsp;_afterLoadWebMMDo(callback){ &nbsp;&nbsp;&nbsp;&nbsp;if(!_aoWin.WebMM){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_aWebMMCallbacks.push(callback); &nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp; &nbsp;&nbsp;function&nbsp;_reportNow(text){ &nbsp;&nbsp;&nbsp;&nbsp;_logInPage(text); &nbsp;&nbsp;&nbsp;&nbsp;_afterLoadWebMMDo(function(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebMM.ossLog({Text:&nbsp;text}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebMM.flushOssLog(); &nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;} &nbsp; &nbsp;&nbsp;var&nbsp;reLoadQRImgCount&nbsp;=&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;loadQRCodeTime&nbsp;=&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;loadQRImgSucc&nbsp;=&nbsp;function(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(loadQRImgWatchDog); [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-29591","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=29591"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29591\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}