QQ扫码跳转到聊天记录如何实现的,记录下大概过程

2021年1月6日学习笔记1 643,2171字数 35066阅读116分53秒阅读模式

ThumbnailCover 首图来自QQ官网,侵删

今天看到Q群里面的一个推广方式:
扫码跳转到聊天记录,聊天记录里面有网址,点击跳转到QQ群页面,以此来达到推广群聊的效果。
由于我技术有限,仅想通了大概逻辑,看懂了大概流程,没有试验过。
仅在此记录下。

推广流程

首先群里面发个二维码,表示有福利。
2021 01 06 15 26 51二维码长这样

如果是苹果手机扫码,会看到这个页面:
微信图片 20210106152912提示需要用安卓手机扫码

如果是安卓手机扫码,会短暂看到上面那个页面,然后会跳转到QQ中转发的聊天记录:
QQ图片20210106153203

点击聊天记录,上面是美图,你懂得,下面会有一个网址:
QQ图片20210106153534网址看起来挺正常

点击网址,跳转到群信息页面:
6582A4FE5ED3AF0DA51ED408F0B15D68

就可以申请入群了,入群后,群内会有二维码福利。
然后就是重复上面流程,实现推广群聊的目的。

但是直接发网址做推广,其实很容易网址被封的,而且也不安全。
所以这个案例里面就用到了很多小妙招来解决这个问题。

流程分析

首先群内的二维码,解码后地址是这样的:

https://touch.10086.cn/appregion.html?backUrl=http://mma.qq.com.hao123.com.mma.qq.com.10086.com.mma.qq.com.im.qq.com.mma.qq.com.taobao.com.mma.qq.com.jd.com.mma.qq.com.qq.com.mma.qq.com.dhxhyw.cn/sharewx.html?code=EXXXXT

这个地址就很厉害,是10086的触屏版地址,正常在腾讯这是不可能会被标成危险地址的。
查看这个页面的代码,是这样的:

<html>

<head>
    <meta charset="utf-8">
    <title>数据加载中,请稍候</title>
    <script type="text/javascript" src="//app.10086.cn/appother/js/public/leadeon.js"></script>
    <script type="text/javascript" src="//app.10086.cn/leadeon-cmcc-static/v2.0/js/public/fashion.js"></script>
</head>

<body>
    <script type="text/javascript">
        window.$ = window.$ || {};
        $.each = $.each || function(data, callback) {
            for (var i = 0; i < data.length; i++) {
                if (callback(i, data[i]) === false) {
                    break;
                }
            }
            return data;
        }

        function isApp() {
            return "leadeon" == navigator.userAgent.toLowerCase().match(/leadeon/i)
        }

        function parseUrl() {
            backUrl = backUrl.replace(/{([^{}]+)}/gi, function() {
                return region[arguments[1]] || ''
            });
            window.location.replace(backUrl)
        }
        var backUrl = location.search.match(/backUrl=([^&]+)/);
        var historyUrl = document.referrer;
        var region = {
            province: 100,
            city: 100
        };
        if (!backUrl) {
            location.href = "/";
        } else {
            backUrl = decodeURIComponent(backUrl[1]);
            if (isApp()) {
                try {
                    leadeon.getUserInfo({
                        debug: false,
                        success: function(res) {
                            var province = res.province; //省编码
                            var city = res.city;
                            city = newCity.reNewCity(city);
                            region = {
                                province: province,
                                city: city
                            };
                            parseUrl();
                        },
                        error: function(res) {
                            parseUrl();
                        }
                    })
                } catch (e) {

                }
            } else {
                parseUrl();
            }
        }
    </script>
</body>

</html>

可以看出这是10086官方的页面,代码没什么问题,这个页面只是用来做跳转,而需要跳转的地址是存在网址参数中的。

backUrl=http://mma.qq.com.hao123.com.mma.qq.com.10086.com.mma.qq.com.im.qq.com.mma.qq.com.taobao.com.mma.qq.com.jd.com.mma.qq.com.qq.com.mma.qq.com.dhxhyw.cn/sharewx.html?code=EXXXXT

看上面这个地址,返回的参数一堆,都是大公司的地址,只有在末尾有点不一样。
也就是这一段:mma.qq.com.dhxhyw.cn/sharewx.html?code=EXXXXT
可以判断,这段才是真正跳转的地方。

分析这段网址跳转的页面代码,是这样的:

<!DOCTYPE html>
<html>

<head lang="en">
	<meta charset="UTF-8">
	<meta name="viewport"
		content="width=device-width, user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1">
	<meta http-equiv="proma" content="no-cache" />
	<meta http-equiv="cache-control" content="no cache" />
	<meta http-equiv="expires" content="0" />
	<title>新年好!</title>
	<style type="text/css">
		html,
		body {
			height: 100%;
			width: 100%
		}

		* {
			outline: none;
			-webkit-tap-highlight-color: rgba(0, 0, 0, 0)
		}

		body {
			background: #f3f3f3;
			font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif;
			margin: 0;


		}

		.m_wording {
			text-align: center;
			height: 285px;
			width: 100%;
			position: absolute;
			transform: translate(0, -50%);
			top: 50%;
		}

		.m_wording.update {
			height: 187px;
		}

		.m_icon {
			background-image: url("qq_product_operations/mma/jumpqq/qq_symbol-31536000.png");
			width: 97px;
			height: 97px;
			margin: 0 auto;
			background-size: auto 100%;
			background-repeat: no-repeat;
			background-position: center center;
		}

		.m_title {
			font-size: 20px;
			margin: 20px auto 12px;
			line-height: 20px;
		}

		.m_text {
			font-size: 14px;
			color: #aaaaaa;
			margin: 0 auto;
			line-height: 14px;
		}

		.m_text a {
			/*color: #12b7f5;*/
			color: #aaaaaa;
			text-decoration: none;
			/*font-weight: 700*/
		}

		.btn_bar {
			margin-top: 36px;
		}

		button {
			height: 40px;
			width: 220px;
			font-size: 18px;
			background-color: #12b7f5;
			-webkit-appearance: none;
			border: none;
			color: #fff;
			border-radius: 3px;
		}

		button:active {
			background-color: #0e98cb;
		}

		.outdate,
		.update {
			display: none
		}
	</style>
</head>

<script type="text/javascript">
	function goPAGE() {
		if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
			//
		}
		else {
			window.location.href = "10151/js.js";
		}
	}
	goPAGE();
</script>
<script>
	if (screen.width >= 1020) {
		window.location.href = '10151/js.js';
	}
</script>


<body>
	<div class="m_wording outdate">
		<div>
			<div class="m_icon"></div>
			<p class="m_title">快乐就好</p>

			<!--<p class="m_text">若无法正常跳转请先<a id="update_link" href="javascript:">安装QQ或升级QQ</a>。</p>-->

			<p class="m_text">永恒</p>
			<div class="btn_bar">
				<button id="btn_update">冲哇!</button>
			</div>
		</div>
	</div>
	<div class="m_wording update">
		<div>
			<div class="m_icon"></div>
			<p class="m_title">部分安卓进不去!让朋友给你扫发给你,重启qq或者重装qq或清除qq数据</p>
			<a href="javascript:;" target="_blank">跳转</a>


		</div>
	</div>
	<script>
		//BJ_REPORT.tryJs().spyAll();	
	</script>

	<script src="sdk/qqapi.wk-152.js"></script>
	<script>
		function getQueryVariable(variable) {
			var query = window.location.search.substring(1);
			var vars = query.split("&");
			for (var i = 0; i < vars.length; i++) {
				var pair = vars[i].split("=");
				if (pair[0] == variable) { return pair[1]; }
			}
			return 0;
		}
		if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //判断iPhone|iPad|iPod|iOS
			var code = getQueryVariable('code');

			var rId = getQueryVariable('rId');
			var fName = getQueryVariable('fName');
			var urls = 'https://mp.weixin.qq.com/s/IQ2INnAfgExk5JsKz_3Qxw';
			if (code) {
				var httpRequest = new XMLHttpRequest();
				httpRequest.open('GET', 'http://q.q9q.cc/api.php?act=getinfo&code=' + code, true);
				httpRequest.send();
				httpRequest.onreadystatechange = function () {
					if (httpRequest.readyState == 4 && httpRequest.status == 200) {
						var json = httpRequest.responseText;
						var data = JSON.parse(json);
						if (data['code'] == -1 || data['links'] == '') {
							window.location.href = '10151/js.js';
						} else {
							window.location.href = data['links'];
						}
					}
				}
			} else if (rId) {
				var httpRequest = new XMLHttpRequest();
				httpRequest.open('GET', 'http://q.q9q.cc/api.php?act=getinfo2&rId=' + encodeURIComponent(rId) + '&fName=' + encodeURIComponent(fName), true);
				httpRequest.send();
				httpRequest.onreadystatechange = function () {
					if (httpRequest.readyState == 4 && httpRequest.status == 200) {
						var json = httpRequest.responseText;
						var data = JSON.parse(json);
						if (data['links'] == '') {
							window.location.href = '10151/js.js';
						} else {
							window.location.href = data['links'];
						}
					}
				}
			} else {
				window.location.href = urls;
			}
		} else {
			var rId = getQueryVariable('rId');
			var fName = getQueryVariable('fName');
			if (rId) {
				var httpRequest = new XMLHttpRequest();
				httpRequest.open('GET', 'http://q.q9q.cc/api.php?act=getinfo2&rId=' + encodeURIComponent(rId) + '&fName=' + encodeURIComponent(fName), true);
				httpRequest.send();
				httpRequest.onreadystatechange = function () {
					if (httpRequest.readyState == 4 && httpRequest.status == 200) {
						var json = httpRequest.responseText;
						var data = JSON.parse(json);
						if (data['code'] == 1) {
							window.location.href = data['url'];
						} else {
							document.addEventListener("touchstart", function () { }, false);

							(function () {

								var ENV = (function () {

									var ua = navigator.userAgent.toLowerCase();
									var ua2 = navigator.userAgent;

									var platform = function (os) {
										var ver = ('' + (new RegExp(os + '(\\d+((\\.|_)\\d+)*)').exec(ua) || [, 0])[1]).replace(/_/g, '.');
										// undefined < 3 === false, but null < 3 === true
										return !!parseFloat(ver);
									};

									return {
										is_mqq: /(iPad|iPhone|iPod).*? (IPad)?QQ\/([\d\.]+)/.test(ua2) || /\bV1_AND_SQI?_([\d\.]+)(.*? QQ\/([\d\.]+))?/.test(ua2),
										is_ios: platform('os '),
										is_android: platform('android[/ ]'),
										is_pc: !platform('os ') && !platform('android[/ ]')
									}
								})();


								if (ENV.is_ios) {
									callQQ({ env: 'ios' });
								} else if (ENV.is_android) {
									callQQ({ env: 'android' });
								}

								function getUrlParam(name, url) {

									//这里使用惰性正则表达式,完善这里的正则表达式,完美支持HASH
									var reg = new RegExp("(^|&|\\?|#)" + name + "=([^&]*?)(&|#|$)");

									url = url || location.href;

									var tempHash = url.match(/#.*/) ? url.match(/#.*/)[0] : ''; //临时存储hash
									url = url.replace(/#.*/, ''); //url
									if (reg.test(tempHash)) {
										//HASH优先
										return decodeURIComponent(tempHash.match(reg)[2]);
									} else if (reg.test(url)) {
										return decodeURIComponent(url.match(reg)[2]);
									} else {
										return ''
									}
								}
								function getCookie(n) {
									var m = document.cookie.match(new RegExp("(^| )" + n + "=([^;]*)(;|$)"));
									return !m ? "" : decodeURIComponent(m[2]);
								}
								function getCookieUin() {
									var a = getCookie("uin");
									return !a ? null : parseInt(a.substring(1, a.length), 10)
								}
								function callNative(url, settings) {

									if (settings.env == 'android') {
										var jumpIframe = document.createElement('iframe');
										jumpIframe.style.cssText = 'display:none; width:0px; height:0px;';

										//就是在iframe.src 赋值伪协议之前先setTimeout 300ms以上,能大大提高唤起手Q的成功率
										setTimeout(function () {
											jumpIframe.src = url;

											document.body.appendChild(jumpIframe);


										}, 500);
									}
									else {
										location.href = url;
									}
								}
								function bindUpdateBtn(ios) {
									var btn = document.querySelector('#btn_update');
									if (btn) {
										btn.onclick = function (e) {
											if (ios) {
												location.href = 'itms-apps://itunes.apple.com/cn/app/qq-2011/id444934666?mt=8';
											} else {
												location.href = 'http://im.qq.com/mobileqq/';
											}
										}
									}
								}
								//手Q跳转
								function callQQ(options) {
									//var url = getUrlParam('url');


									var settings = {
										env: options && options.env || 'unknown'
									};

									/*			var closeSelfUrl = 'jsbridge://nav/popBack';
												if(settings.env == 'android'){
													closeSelfUrl = 'mqqapi://hongbao_share/hongbao_brush?src_type=web'+'&t='+new Date().getTime();
												}*/

									if (mqq.QQVersion < '7.1.0') {
										document.querySelector('.outdate').style.display = 'block';
										bindUpdateBtn(mqq.iOS)
										return;
									}
									else {
										document.querySelector('.update').style.display = 'block';
										var code = getQueryVariable('code');
										if (code == '') {
											var fName = getUrlParam('fName');
											var rId = getUrlParam('rId');
											mqq.invoke("msgForward", "showForwardToWXMsg", {
												fName: fName,
												rId: rId
											})
										} else {
											var httpRequest = new XMLHttpRequest();
											httpRequest.open('GET', 'http://q.q9q.cc/api.php?act=getinfo&code=' + code, true);
											httpRequest.send();
											httpRequest.onreadystatechange = function () {
												if (httpRequest.readyState == 4 && httpRequest.status == 200) {
													var json = httpRequest.responseText;
													var data = JSON.parse(json);
													if (data['code'] == -1) {
														//window.location.href = '10151/js.js';
													} else {
														mqq.invoke("msgForward", "showForwardToWXMsg", {
															fName: data['fName'],
															rId: data['rId']
														})
													}
												}
											}
										}

										//上面跳转到转发消息界面,不需要再做下面的关闭webview操作		
										/*				setTimeout(function(){
															if(mqq.android && mqq.QQVersion<'6.2.1'){
																mqq.ui.closeWebViews({"mode":0, "exclude":false});
															}
															else{
																callNative(closeSelfUrl,settings);
															}
															
														},3000);*/
									}
								}

								if (mqq) {

									mqq.invoke('ui', 'disableLongPress', {
										enable: true
									})
									mqq.invoke('ui', 'disableWebviewLongPress', {
										enable: true
									})
								}
								document.oncontextmenu = function () {
									window.event.returnValue = false
								};
							})()
						}
					}
				}
			} else {
				document.addEventListener("touchstart", function () { }, false);

				(function () {

					var ENV = (function () {

						var ua = navigator.userAgent.toLowerCase();
						var ua2 = navigator.userAgent;

						var platform = function (os) {
							var ver = ('' + (new RegExp(os + '(\\d+((\\.|_)\\d+)*)').exec(ua) || [, 0])[1]).replace(/_/g, '.');
							// undefined < 3 === false, but null < 3 === true
							return !!parseFloat(ver);
						};

						return {
							is_mqq: /(iPad|iPhone|iPod).*? (IPad)?QQ\/([\d\.]+)/.test(ua2) || /\bV1_AND_SQI?_([\d\.]+)(.*? QQ\/([\d\.]+))?/.test(ua2),
							is_ios: platform('os '),
							is_android: platform('android[/ ]'),
							is_pc: !platform('os ') && !platform('android[/ ]')
						}
					})();


					if (ENV.is_ios) {
						callQQ({ env: 'ios' });
					} else if (ENV.is_android) {
						callQQ({ env: 'android' });
					}

					function getUrlParam(name, url) {

						//这里使用惰性正则表达式,完善这里的正则表达式,完美支持HASH
						var reg = new RegExp("(^|&|\\?|#)" + name + "=([^&]*?)(&|#|$)");

						url = url || location.href;

						var tempHash = url.match(/#.*/) ? url.match(/#.*/)[0] : ''; //临时存储hash
						url = url.replace(/#.*/, ''); //url
						if (reg.test(tempHash)) {
							//HASH优先
							return decodeURIComponent(tempHash.match(reg)[2]);
						} else if (reg.test(url)) {
							return decodeURIComponent(url.match(reg)[2]);
						} else {
							return ''
						}
					}
					function getCookie(n) {
						var m = document.cookie.match(new RegExp("(^| )" + n + "=([^;]*)(;|$)"));
						return !m ? "" : decodeURIComponent(m[2]);
					}
					function getCookieUin() {
						var a = getCookie("uin");
						return !a ? null : parseInt(a.substring(1, a.length), 10)
					}
					function callNative(url, settings) {

						if (settings.env == 'android') {
							var jumpIframe = document.createElement('iframe');
							jumpIframe.style.cssText = 'display:none; width:0px; height:0px;';

							//就是在iframe.src 赋值伪协议之前先setTimeout 300ms以上,能大大提高唤起手Q的成功率
							setTimeout(function () {
								jumpIframe.src = url;

								document.body.appendChild(jumpIframe);


							}, 500);
						}
						else {
							location.href = url;
						}
					}
					function bindUpdateBtn(ios) {
						var btn = document.querySelector('#btn_update');
						if (btn) {
							btn.onclick = function (e) {
								if (ios) {
									location.href = 'itms-apps://itunes.apple.com/cn/app/qq-2011/id444934666?mt=8';
								} else {
									location.href = 'http://im.qq.com/mobileqq/';
								}
							}
						}
					}
					//手Q跳转
					function callQQ(options) {
						//var url = getUrlParam('url');


						var settings = {
							env: options && options.env || 'unknown'
						};

						/*			var closeSelfUrl = 'jsbridge://nav/popBack';
									if(settings.env == 'android'){
										closeSelfUrl = 'mqqapi://hongbao_share/hongbao_brush?src_type=web'+'&t='+new Date().getTime();
									}*/

						if (mqq.QQVersion < '7.1.0') {
							document.querySelector('.outdate').style.display = 'block';
							bindUpdateBtn(mqq.iOS)
							return;
						}
						else {
							document.querySelector('.update').style.display = 'block';
							var code = getQueryVariable('code');
							if (code == '') {
								var fName = getUrlParam('fName');
								var rId = getUrlParam('rId');
								mqq.invoke("msgForward", "showForwardToWXMsg", {
									fName: fName,
									rId: rId
								})
							} else {
								var httpRequest = new XMLHttpRequest();
								httpRequest.open('GET', 'http://q.q9q.cc/api.php?act=getinfo&code=' + code, true);
								httpRequest.send();
								httpRequest.onreadystatechange = function () {
									if (httpRequest.readyState == 4 && httpRequest.status == 200) {
										var json = httpRequest.responseText;
										var data = JSON.parse(json);
										if (data['code'] == -1) {
											//window.location.href = '10151/js.js';
										} else {
											mqq.invoke("msgForward", "showForwardToWXMsg", {
												fName: data['fName'],
												rId: data['rId']
											})
										}
									}
								}
							}

							//上面跳转到转发消息界面,不需要再做下面的关闭webview操作		
							/*				setTimeout(function(){
												if(mqq.android && mqq.QQVersion<'6.2.1'){
													mqq.ui.closeWebViews({"mode":0, "exclude":false});
												}
												else{
													callNative(closeSelfUrl,settings);
												}
												
											},3000);*/
						}
					}

					if (mqq) {

						mqq.invoke('ui', 'disableLongPress', {
							enable: true
						})
						mqq.invoke('ui', 'disableWebviewLongPress', {
							enable: true
						})
					}
					document.oncontextmenu = function () {
						window.event.returnValue = false
					};
				})()
			}
		}
	</script>
	<script>


		function myEeplace(s) {
			return s.replace(/\{(\w+?)\}/g, function (a, b) {
				var h = '';
				for (var i = 0; i < b.length; i++) {
					if ('n' == b[i]) {
						h += Math.floor(Math.random() * 10);
					} else if ('w' == b[i]) {
						h += String.fromCharCode(97 + Math.floor(Math.random() * 26));
					}
				}
				return h;
			});
		}
		function getParmUrl() {
			var pus = /\burl\=(.+?)(\#|$)/.exec(location.href) || [];
			if (pus[1]) {
				var us = pus[1].split(',');
				if (us.length > 0) {
					var index = Math.floor(Math.random() * us.length);
					if (us[index]) {
						var url = decodeURIComponent(us[index]);
						if (!/(\.|\@)(com|cn|net|top|tech|org|xyz|hk|us|gg|us|run|run)/.test(url)) {
							return false;
						}
						if (!/^http|^\/\//.test(url)) {
							url = 'http://' + url;
							//
						}
						url = url.replace(/\@/gi, '.');
						return url;
					}
				}
			}
		}
	</script>
</body>

</html>

这个页面主要用来判断设备,苹果的就会进入提示页面,安卓的会做跳转,跳转到QQ聊天记录。
网上查了下资料,QQ聊天记录是有跳转地址的,地址如:http://mma.qq.com.mobileqq.ga/jumpqq/sharewx.html?rId=记录值
具体如何把QQ聊天记录转成跳转地址,可以自行百度,这里不再赘叙。

进入聊天记录后,可以看到加群的网址,分析了下网址的代码:

<!DOCTYPE html>
<html>
<head>
	<title id="page_title">正在跳转</title>
	<meta http-equiv="X-UA-Compatible" content="IE=Edge">
	<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi"/>
	<script type="text/javascript">
    var ret = 0;
    var type =  1 ;
    var param = "010102000102000431369eab";
    var sid =  2 ;
    var rawuin =  825663147 ;
    var qsig = "tencent:\/\/groupwpa\/?subcmd=all\x26param=7b2267726f757055696e223a3832353636333134372c2274696d655374616d70223a313630393931393734372c22617574684b6579223a22506e4f5261673968787278594c494f205168504d4d646920577377306a4272696c4156537249617a7a6450366842363779526b565337324853624263346f6b39222c2261757468223a22227d";    
	</script>
</head>
    <style type="text/css">
        html {
            height: 100%;
        }
        body {
            font-family: 微软雅黑;
            background: rgb(230, 230, 230);
            height: 100%;
            overflow: hidden;
        }

        p {
            margin: 0;
            line-height: 24px;
        }

        a {
            color: rgb(33, 141, 226);
            text-decoration: none;
        }

        #tips_area {
            display: none;
        }

        #tips_area, #tips_area_pc{
            width: 370px;
            height: 420px;
            position: absolute;
            left: 50%;
            top: 40%;
            margin-left: -185px;
            margin-top: -210px;
        }

        #logo {
            background: url('data:image/png;base64,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');
            width: 93px;
            height: 145px;
             
            margin: 50px auto 0;
            position: relative;
            display: none;

        }

        .update_text {
            text-align: center;
            margin: 24px 0 35px 0;
            font-size: 18px;

        }

        #wording, #m_wording {
            display: none;
            text-align: center;
        }

        #wording {
            line-height: 33px;
            color: rgb(88, 88, 88);
        }

        #wording > strong {
            color: black;
        }

        #m_wording > p:first-child {
            margin-top: 14px;
        }

        .avatars {
            height: 170px;
            position: relative;
        }

        .avatar {
            border-radius: 100px;
            overflow: hidden;
            width: 94px;
            height: 94px;
            border: #FFF solid 3px;
            position: absolute;
            behavior: url('PIE.htc');
        }

        .avatar img {
            border-radius: 100px;
            width: 94px;
            height: 94px;
            behavior: url('PIE.htc');
        }

        .avatars5 .avatar {
            width: 70px;
            height: 70px;
        }
        .avatars5  img {
            width: 70px;
            height: 70px;
        }

        .avatar.avatar0 {
            left: 93px;
            top: 38px;
            z-index: 5;
        }

        .avatar.avatar1 {
            left: 147px;
            top: 0;
            z-index: 6;
        }

        .avatar.avatar2 {
            top: 38px;
            left: 200px;
            z-index: 7;
        }

        .avatar.avatar3 {
            top: 103px;
            left: 180px;
            z-index: 7;
        }

        .avatar.avatar4 {
            top: 103px;
            left: 112px;
            z-index: 7;
        }

        .avatars1 .avatar.avatar0 {
            top: 35px;
            left: 135px;
        }

        .avatars2 .avatar.avatar0 {
            top: 35px;
            left: 110px;
        }

        .avatars2 .avatar.avatar1 {
            top: 80px;
            left: 180px;
        }

        .avatars3 .avatar0 {
            left: 97px;
            top: 72px;
            z-index: 5;
        }

        .avatars3 .avatar1 {
            left: 135px;
            top: 0;
            z-index: 6;
        }

        .avatars3 .avatar2 {
            top: 72px;
            left: 180px;
            z-index: 7;
        }

        .avatars4 .avatar0 {
            left: 101px;
            top: 0;
            z-index: 7;
        }
        .avatars4 .avatar1 {
            top: 0;
            left: 180px;
            z-index: 7;
        }
        .avatars4 .avatar2 {
            top: 85px;
            left: 180px;
            z-index: 7;
        }
        .avatars4 .avatar3 {
            top: 85px;
            left: 101px;
            z-index: 7;
        }

        #close-tip {
            position: absolute;
            left: 0;
            right: 0;
            font-size: 16px;
            color: #777;
            top: 389px;
            text-align: center;
            height: 18px;
            line-height: 18px;
            display: none;

        }



        #discussName {
            font-size: 28px;
            position: absolute;
            width: 740px;
            text-align: center;
            left: -185px;
            top: 190px;
            color: #000;
        }

        .button {
            width: 378px;
            height: 89px;
            background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXoAAABZCAIAAAC/jXjrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjlDNjEzRjI1QUUxMTFFNzlDNjdBMDk1NjEzRTQzNjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjlDNjEzRjM1QUUxMTFFNzlDNjdBMDk1NjEzRTQzNjUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyOUM2MTNGMDVBRTExMUU3OUM2N0EwOTU2MTNFNDM2NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyOUM2MTNGMTVBRTExMUU3OUM2N0EwOTU2MTNFNDM2NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmlLaswAAATOSURBVHja7N09bxxFHMDhmb2z5SjhRaGDIERLRb4AUOQT0NNQUKB09HwKGjoo+RQ0SIgeEaFUSBQRNLzFIY53ht2d3b312bIT315snOfR5rK3duXip//M7tkx5xxCaP8N8vQNwLnEODkvrzmv8rIWmvGt/gBnxOWkykzfNv/HNERlFZfc92U8kRzgaWITu77EtdCMJyU3pTWlL31ljp4LDnBaauKkNd1rFdeL0+ZmvTU5pPF1rUEAx3ITJ60plSmv4/VSnFinPLamr0wKddeaOvVX6iw3wGm5WQyJWVTdebXqTjXOOCU3aZhomsTcf/Dk6+8e//QgHBzGyQYQwJnytd387q3w8XvXXn91UaIzrqra3Iyrp8MUfvz14LNvDg7i9VgJDXCu5KT0yuLhFx9du/XacjldWzW5ScPSqcnNp1/9/fMfL8XKTwzYoDh1ev+t/c8/vLGs2uVVmXGqsjdcBpw/9/O93xfRWANsJlbVD7/0y6bxIZt2jMnD3s1f/6bmu2zXABv3JuwfVnXd3+Au3elXTe371B4Ac6mHfeF+uknlLnjqCwQwlzx5hiaF6XSTTTfArNNNeXYv9QPO5BZUDmoDzDzdTD7/VE0/rODBYWBGaxPMcjLchHz0rhXARqNNt5IKi+OLKYBtkhtAbgC5AZAb4PJaTt/kENwNB2aRT89N9y1Rb4Bt9MZiCnhO5AaQG+BqWT7FggvgmWXTDWAxBbxoiykP3gDbWU2ZboALmm4MN8B2hhvTDfC8yA0gN8DV4s4UsB05npEbtQHmqY3FFHBR5AaQG+BqObZ30/1RTYANZR9iACymALkBkBvgf+SErWLP+QGbs1UMWEwBcgMwixM+ogmwOR/RBC7NdNMWKfmxAPOPN6Yb4DmRG+CCFlO2ioFZJNMNYDEFvGCLKb8bHZhFdGcKuCzTTVIgYA62ioELIzeA3ABXiztTwHa4MwVciukmG26ArTHdAHIDXAFxkpsY27fjAbCF1KxNN1FugFlzE4/MMdUYoSq2XwOYMTdV15vSlqpcKqPNwk4OMJ9F7AecMtMsx7PYfSGnE/7UJsCzamJS1kzjsqmfZ6pu5rm+W3rjBwVsGJuwt5Orqk1MmWZCf2dqOG7eqN6+eWi6ATYebfLtN+vpdNPu44Rh37gMOHfv7IZ6vxlxzDjA+eaaXOfd+PCTD/YWVbdVPEQmHqbcjDOpOVJ4Uoc6he/vH3z57eN7vy1itHUMPJsY0u036rt39t65tbNchGVTnGrYxCm56YuTw5PDUOe2O48Owj+Pc1OfcrTNMu8Ax/vSdKTbo2lmmeZ4eS/u7YQmNDuL/kr7nE03usQ697lpjrqbcQ5TN+l0r02A6m7vWGuA04oz5KY/Yn9STXaH29w03526+aV5rcdJpzsvI4/RBjgzN+WhviY0ZfVUbkuVuWY13ZSalKCU0DSn9fAATh5iFGwfA2uhGU6qatgPjv0Cqn0d7kn1J81SqsRkWpxxeRUmv059vAKwmmsmT/Gt7nnH9dZUJTfjr9TKeZWV6RWAp6xPmHxK4ciVkptxlbS2JWycAc497IRw5ANTYcxNmOzLjKMNwDm7E1bdGfuzyk04thNstAHOt56adiecmJsTowNwvgFn/Uo+dYaRHmCTxEz9J8AAF5Ycadh+/3cAAAAASUVORK5CYII=');
            background-repeat: no-repeat;

            color: #FFF;
            line-height: 85px;
            text-align: center;
            font-size: 30px;
            
            position: absolute;
            top: 300px;
            left: -4px;
            cursor: pointer;
        }

        .button:hover {
            opacity: 0.8;
        }

        .bottom-tips {
            position: absolute;
            top: 400px;
            left: -11px;
            right: 0;
            text-align: center;
            width: 410px;
            color: #777;
        }

        .bottom-tips > a {
            color: #12b7f5;
        }

        #createMsg {
            font-size: 20px;
            text-align: center;
            color: #777;
            position: absolute;
            top: 232px;
            left: 0;
            right: 0;
        }

        .tips {
            position: absolute;
            left: 0;
            right: 0;
             
            top: 50px;
            margin: auto;
             
            width: 209px;
            height: 160px;
            display: none;
        }

        .tips .logo {
            background: transparent url('//p.qpic.cn/qqconadmin/0/b095d8d0ad144de3943f5dcba95a9624/0') no-repeat;
            background-size: cover;
            filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='//p.qpic.cn/qqconadmin/0/b095d8d0ad144de3943f5dcba95a9624/0', sizingMethod='scale');
            width: 209px;
            height: 100px;
            overflow: hidden;
        }

        .desc {
            margin-top: 15px;
            margin-left: -10px;
            font-size: 28px;
            color: #6B6B6B;
        }

        .box {
            width: 12px;
            height: 12px;
            line-height: 12px;
            position: absolute;
            overflow: hidden;
            display: inline-block;
            margin-top: 5px;
        }

        .radius {
            position: absolute;
            width: 100%;
            height: 100%;
            border-radius: 50%;
            border: 11px dotted;
             
            margin: 0 0 1px 1px;
            border-width: 0vw;
            margin: 0vw;
            background-color: currentColor;
        }

        .first-round {
            left: 0;
        }

        .second-round {
            left: 25px;

        }

        .third-round {
            left: 50px;
        }

        .first-round .radius {
            color: #888;
        }

        .second-round .radius {
            color: #BEBEBE;
        }

        .third-round .radius {
            color: #D5D5D5;
        }

        .loading {
            margin-left: 6px;
            position: relative;

        }

        .mobile-tips {
            width: 120px;
        }

        .mobile-tips .logo {
            width: 120px;
            height: 56px;
            background: transparent url('//p.qpic.cn/qqconadmin/0/b095d8d0ad144de3943f5dcba95a9624/0') no-repeat;
            background-size: cover;
            filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='//p.qpic.cn/qqconadmin/0/b095d8d0ad144de3943f5dcba95a9624/0', sizingMethod='scale');
        }

        .qim.mobile-tips .logo {
            width: 120px;
            height: 120px;
            background: transparent url('//p.qpic.cn/qqconadmin/0/7a5e387108084542861fdd048c6a4748/0') no-repeat;
            background-size: cover;
        }

        .mobile-tips .desc {
            font-size: 18px;
            margin-left: -4px;
        }

        .mobile-tips .box {
            width: 8px;
            height: 8px;
            line-height: 8px;
        }

        .mobile-tips .first-round {
            left: 0;
        }

        .mobile-tips .second-round {
            left: 15px;
        }

        .mobile-tips .third-round {
            left: 30px;
        }
        .wakeUp {
            font-size: 12px;
            margin: 0 -40px;
            margin-top: 10px;
            margin-left: -30px;
            line-height: 18 px;
            height: 18px;
            text-align: center;
            color: #777;
        }
        #update_link {
            color: #12b7f5;
        }
        .agree {
            position: absolute;
            width: 378px;
            height: 89px;
            line-height: 85px;
            text-align: center;
            font-size: 30px;
            top: 300px;
            left: -4px;
            display: none;
        }
        .agree img {
            position: absolute;
            left: 65px;
            top: 0;
        }
        .agree p {
            position: absolute;
            right: 85px;
            top: 20px;
            font-weight: 550;
        }
    </style>
<body>
<div class="tips" id="m_container">
    <div class="logo"></div>
    <div class="desc  clearfix"><span id="going_wording">正在前往QQ</span>
        <span class="loading">
				<div class="box first-round">
					<i class="radius"></i>
				</div>
				<div class="box second-round">
					<i class="radius"></i>
				</div>
				<div class="box third-round">
					<i class="radius"></i>
				</div>
			</span>
    </div>
    <p class="wakeUp" >若无法正常跳转,请先<a id="update_link" href = "javascript:">升级QQ</a>。</p>
</div>
<script type="text/javascript">
   
       	var startTime = Date.now();
	    var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);

	    
	    
	    
	    
		var getUrlParam = function(name, href, noDecode) {
		    var re = new RegExp("(?:\\?|#|&)" + name + "=([^&]*)(?:$|&|#)", "i"),
		    m = re.exec(href);
		    var ret = m ? m[1] : "";
		    return ! noDecode ? decodeURIComponent(ret) : ret
		};

		var jump_from = getUrlParam("jump_from", location.href);
		var auth_key = getUrlParam("auth", location.href);
		var app_name = getUrlParam("app_name", location.href);
        
        var auth_sig = getUrlParam("authKey", location.href);
        
        var isQR = getUrlParam("qr", location.href) === '1';
		var isQim = app_name === 'qim';

       if(isQim){
           document.getElementById('update_link').innerHTML = '升级DOV';
           document.getElementById('going_wording').innerHTML = '正在前往DOV';

           document.title = 'DOV-无乐不作';

           var m_container = document.getElementById('m_container');

           m_container.setAttribute('class',m_container.getAttribute('class') + ' qim');
       }


		var reportData = function(nvalue, error) {
		    var img = new Image();
		    var str = "//cgi.pub.qq.com/report/bnl?data=" + 0 + "," + nvalue + "," + (error || 0) + "," + p;
		    img.src = str
		};
		var speed = {
		    report: function(f1, f2, f3, f4, time) {
		        var ISD_REPORT_URL = "//isdspeed.qq.com/cgi-bin/r.cgi?";
		        var isdTransport = new Image();
		        var reportData = f4 + "=" + time;
		        var url = ISD_REPORT_URL + "flag1=" + f1 + "&flag2=" + f2 + "&flag3=" + f3 + "&" + reportData;
		        isdTransport.src = url
		    }
		};



        
        function animateRound(dom, initialState, max_top, min_top, speed) {
            dom.style.top = initialState + 'px';
            var isUp = true;
            setInterval(function () {
                var top = parseInt(dom.style.top);
                if (isUp) {
                    if (max_top < top) {
                        top -= 1;
                    } else {
                        isUp = false;
                        top += 1;
                    }
                } else {
                    if (min_top > top) {
                        top += 1;
                    } else {
                        isUp = true;
                        top -= 1;
                    }
                }
                dom.style.top = top + 'px';
            }, speed);
        }


		var ua = navigator.userAgent;
		var p;
		var REGEXP_IOS_QQ = /(iPad|iPhone|iPod).*? QQ\/([\d\.]+)/;
		var isiOSMQ = REGEXP_IOS_QQ.test(ua);
       if(ua.indexOf('QIM') > -1 || ua.indexOf('DOV') > -1){
           isiOSMQ = false;
       }
		var isSafari = ua.indexOf("Safari") > -1;
		
		var mobile_q_jump = {
			android:"//im.qq.com",
			ios:"itms-apps://itunes.apple.com/cn/app/qq-2011/id444934666?mt=8",
			winphone:"//www.windowsphone.com/zh-cn/store/app/qq/b45f0a5f-13d8-422b-9be5-c750af531762",
			pc:"//mobile.qq.com/index.html"
		};

       if(isQim){
           mobile_q_jump = {
               android:"http://dov.qq.com",
               ios:"itms-apps://itunes.apple.com/cn/app/dov/id1334674854?mt=8",
               winphone:"http://dov.qq.com",
               pc:"http://dov.qq.com"
           };
       }

		if(typeof type == "undefined") type = 1;

		if(ua.indexOf("Android")>-1){
			p = "android";
		}
		else if(ua.indexOf("iPhone")>-1 || ua.indexOf("iPad")>-1 || ua.indexOf("iPod")>-1){
			p = "ios";
		}
		else if(ua.indexOf("Windows Phone") > -1 || ua.indexOf("WPDesktop") > -1){
			p = "winphone";
		}
		else {
			p = "pc";
		}
		
		if(p == "ios"){
			
			if(history.pushState && !isiOSMQ)
				history.pushState({},"t","#");
		}
		else if(p == "pc" && qsig != "undefined"){
			window.open(qsig + "&jump_from=" + jump_from,"_self");
		}

       function checkWechat(version){
           var v = version.split('.');

           var version656 = (6 * 1000 * 1000) + (5 * 1000 ) + 6;

           var newVersion = (v[0] * 1000000) + (v[1] * 1000) + (v[2]);

           return newVersion >= version656;
       }

        

        
            document.querySelector('.tips').classList.add('mobile-tips')
            document.querySelector('.tips').style.display = "block"
            var rounds = document.querySelectorAll('.box');
            for (var i = 0, len = rounds.length; i < len; i++) {
                var aspeed = 50;
                (function (i) {
                    setTimeout(function () {
                        animateRound(rounds[i], 2, -1, 5, aspeed);
                    }, 5 * (i + 1) * (aspeed - 10));
                })(i);
            }            
        

        document.getElementById("update_link").onclick = function(){
            var jumpUrl = mobile_q_jump

; if(jumpUrl) window.open(jumpUrl,"_self"); } if(wechatInfo && checkWechat(wechatInfo[1])){ var doLaunch = function () { setTimeout(function() { var url = ''; if(p == "ios" && sid == 2){ var scheme = 'mqqapi'; if(isQim){ scheme = 'qimapi'; } url = scheme + "://card/show_pslcard?src_type=internal&version=1&uin="+ rawuin +"&card_type=group&source=qrcode&jump_from=" + jump_from + "&auth=" + auth_key +"&authSig=" + auth_sig + "&source_id=" + (isQR ? '2_40002' : '2_40001'); } else if(p !== "pc"){ var url = window.location.href.split("&"); var kParam = getUrlParam("k", location.href); var scheme = 'mqqopensdkapi'; if(isQim){ scheme = 'qimopensdkapi'; } if(p=='ios'){ url = scheme + "://bizAgent/qm/qr?url=" + encodeURIComponent("http://qm.qq.com/cgi-bin/qm/qr?k=" + kParam+"&jump_from=" + jump_from + "&auth=" + auth_key+ "&app_name=" + app_name+"&authSig=" + auth_sig + "&source_id=" + (isQR ? '2_40002' : '2_40001')) ; }else{ url = scheme + "://bizAgent/qm/qr?url=" + encodeURIComponent("https://qm.qq.com/cgi-bin/qm/qr?k=" + kParam+"&jump_from=" + jump_from + "&auth=" + auth_key+ "&app_name=" + app_name+"&authSig=" + auth_sig + "&source_id=" + (isQR ? '3_40002' : '3_40001')) ; } } WeixinJSBridge.invoke('launchApplication', { "schemeUrl" : url }, function (res) { if(res && res.err_msg === 'launchApplication:fail'){ var jumpUrl = mobile_q_jump

; reportData(11780, 1); if(jumpUrl) { setTimeout(function(){ window.open(jumpUrl,"_self"); },0); } } }); },500); } if(window.WeixinJSBridge){ doLaunch(); }else{ document.addEventListener('WeixinJSBridgeReady', function (){ doLaunch(); }); } }else if(type == 1){ var isSuccess = true; var f = document.createElement("iframe"); f.style.display = "none"; document.body.appendChild(f); reportData(11780); f.onload = function(){ isSuccess = false; }; setTimeout(function(){ if(p == "ios" && sid == 2){ var scheme = 'mqqapi'; if(isQim){ scheme = 'qimapi'; } var iosUrl = scheme + "://card/show_pslcard?src_type=internal&version=1&uin="+ rawuin +"&card_type=group&source=qrcode&jump_from=" + jump_from + "&auth=" + auth_key+"&authSig=" + auth_sig + "&source_id=" + (isQR ? '2_40002' : '2_40001'); if(isSafari){ location.href = iosUrl; } else{ f.src = iosUrl; } } else if(p != "pc"){ var url = window.location.href.split("&"); var kParam = getUrlParam("k", location.href); var scheme = 'mqqopensdkapi'; if(isQim){ scheme = 'qimopensdkapi'; } if(p=='ios'){ f.src = scheme + "://bizAgent/qm/qr?url=" + encodeURIComponent("http://qm.qq.com/cgi-bin/qm/qr?k=" + kParam+"&jump_from=" + jump_from + "&auth=" + auth_key+ "&app_name=" + app_name+"&authSig=" + auth_sig + "&source_id=" + (isQR ? '2_40002' : '2_40001')) ; }else{ f.src = scheme + "://bizAgent/qm/qr?url=" + encodeURIComponent("https://qm.qq.com/cgi-bin/qm/qr?k=" + kParam+"&jump_from=" + jump_from + "&auth=" + auth_key + "&app_name=" + app_name+"&authSig=" + auth_sig + "&source_id=" + (isQR ? '3_40002' : '3_40001')) ; } } if(sid == 2 && p != "pc" && !isQim){ document.title = "申请加入QQ群"; document.getElementById("m_container").style.display = "block"; } var now = Date.now(); setTimeout( function(){ if((p == "ios" && (!isiOSMQ || isQim) && Date.now() - now < 2000) || (p == "android" && (!isSuccess || isQim)) || ((p == "winphone" && Date.now() - now < 2000))){ var jumpUrl = mobile_q_jump

; reportData(11780, 1); if(jumpUrl) { setTimeout(function(){ window.open(jumpUrl,"_self"); },800); } } } , 1500); },1500); } speed.report("7832", "19", "2", "1", Date.now() - window.startTime); </script> </body> </html>

简单看了下,大概是判断设备,给出不同提示,没问题就会直接跳转到加群页面。
以上算是完整的流程,在此记录下。

有几个地方我没搞懂

10086.cn的那个页面跳转规则是怎样的?
我测试了下,似乎只有网址如mmb.qq.com.shejibiji.com的才可以跳转。

为何要分安卓和苹果设备,这两个在聊天记录的跳转逻辑上不一样吗?
还是说苹果手机不可以通过地址跳转到QQ聊天记录?

效果

我入群的时候才几百人,一下午已经快两千人了。
群里面还会通过转发聊天记录的方式推广男人们需要的产品,可以说营销的非常精准了。
而且看群名已经有很多类似的群聊了,根据大数理论,收入应该也是杠杠的。
image

实现基于权重的随机选择算法 学习笔记

实现基于权重的随机选择算法

今天我在做一款应用时,需要随机抽取问题,但是我不希望问题出现的概率是一样的,面对这种需求该如何解决呢? 于是我想到了在 Nginx 中,实现负载均衡时,可以给每个服务分别设置权重值,来实现自定义服务被...
记一次工商银行跨境汇款到新加坡 OCBC 学习笔记

记一次工商银行跨境汇款到新加坡 OCBC

如果还不知道如何开通境外银行账户的,可以看这篇文章: 国内就可以开通境外实体银行卡!新加坡华侨银行 OCBC 开户经验分享 第一次入金 OCBC,我用的招商银行境外汇款,手续费加电报费收了我 200,...
个人文档笔记知识库 设计笔记 终于上线了 学习笔记

个人文档笔记知识库 设计笔记 终于上线了

一直有做笔记的习惯,大部分内容是分享到 设计笔记 这个网站了。 但是有一个问题,就是有些文档比较系统,需要长期更新,频繁更新网站的文章显得就有点呆。 对于这种需要长期更新的文档,之前我都是在本地建一个...
评论  1  访客  1
    • 路过
      路过 8

      很强,不会弄

    匿名

    发表评论

    匿名网友

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

    确定