网页源码在线查看
✅ 源码获取成功
网页源码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Expires" content="0">
<title>鲸云漫游-云游戏-云电脑</title>
<link rel="icon" href="/assets/favicon.ico">
<script src="/js/config.js?t=007"></script>
<script src="/js/globalMethod.js?t=007"></script>
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
background: #FFFFFF;
}
.start-container {
position: relative;
width: 100%;
height: 100%;
}
.img-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
z-index: 1;
}
.img-text {
position: absolute;
width: 60%;
left: 20%;
top: 22%;
z-index: 2;
}
.img-app {
position: absolute;
width: 50%;
left: 25%;
top: 82%;
z-index: 3;
}
</style>
</head>
<body>
<div class="start-container">
<img src="/assets/redirect/bg.png" class="img-bg"/>
<img src="/assets/redirect/ic_launch_text.png" class="img-text"/>
<img src="/assets/redirect/ic_launch_app_name.png" class="img-app"/>
<div id="error-msg" style="display:none; position:absolute; bottom:20px; left:0; right:0; text-align:center; color:red; z-index:10;"></div>
</div>
<script>
/**
* 中转页:请求接口获取跳转域名,根据 URL 路径深度跳转到不同页面
* - 一级路径 /abc → /#/home?short_key=abc
* - 二级路径 /abc/123 → /#/gameDetails/123?short_key=abc
*/
// 获取 URL 查询参数(? 后面的部分)
function getUrlParams() {
const params = {};
const searchParams = new URLSearchParams(location.search);
for (const [key, value] of searchParams.entries()) {
params[key] = value;
}
return params;
}
// 获取 URL 路径中的各段(去除首尾斜杠,返回数组)
function getPathSegments() {
const path = window.location.pathname;
// 去除首尾斜杠,然后按斜杠分割,过滤空字符串
const segments = path.replace(/^\/+|\/+$/g, '').split('/');
return segments.filter(seg => seg !== '');
}
// 根据路径段生成目标 hash 和查询参数(参数放在 hash 前面)
function getTargetHashAndParams(originalParams) {
const segments = getPathSegments();
let hash = '#/home'; // 纯 hash,不带前导斜杠
let extraParams = {};
if (segments.length === 0) {
hash = '#/home';
} else if (segments.length === 1) {
hash = '#/home';
extraParams.short_key = segments[0];
} else if (segments.length >= 2) {
hash = `#/gameDetails/${segments[1]}`;
extraParams.short_key = segments[0];
}
// 过滤掉 code 参数(不要带到 URL)
const { code, ...filteredParams } = originalParams;
// 合并 extraParams(short_key 等)
const allParams = { ...filteredParams, ...extraParams };
const queryString = qs(allParams);
return { hash, queryString };
}
// 执行跳转(参数放在 hash 前面,格式如 /?short_key=123#/home)
function redirect(targetUrl, originalParams) {
if (!targetUrl) {
showError('未获取到跳转地址');
return;
}
// 将 wechatBrowserOpenId 合并到参数中(避免单独拼接)
const wechatOpenId = localStorage.getItem('wechatBrowserOpenId');
const mergedParams = { ...originalParams };
if (wechatOpenId) {
mergedParams.wechatBrowserOpenId = wechatOpenId;
}
const { hash, queryString } = getTargetHashAndParams(mergedParams);
const env = window.APP_CONFIG.getCurrentEnv();
// 根据环境确定基础 URL
let baseUrl = env === 'development'
? 'https://sptest.jingyungame.com/home'
: targetUrl;
// 去除 baseUrl 末尾多余的斜杠(避免出现 //)
baseUrl = baseUrl.replace(/\/$/, '');
// 构造最终 URL:查询参数在前,hash 在后
let finalUrl;
if (queryString) {
finalUrl = `${baseUrl}/?${queryString}${hash}`;
} else {
finalUrl = `${baseUrl}${hash}`;
}
console.log('finalUrl', finalUrl);
// 使用 replace 避免返回中转页
setTimeout(() => {
location.replace(finalUrl);
}, 100);
}
// 显示错误信息
function showError(msg) {
const errorEl = document.getElementById('error-msg');
if (errorEl) {
errorEl.textContent = msg;
errorEl.style.display = 'block';
}
}
// 清除 URL 中的 code 参数(微信授权回调后避免重复使用失效 code 导致循环)
function removeCodeFromUrl() {
const url = new URL(location.href);
url.searchParams.delete('code');
// hash 中也可能携带 code(如 #/path?code=xxx)
if (url.hash && url.hash.includes('?')) {
const [hashPath, queryStr] = url.hash.split('?');
const params = new URLSearchParams(queryStr);
params.delete('code');
const remain = params.toString();
url.hash = remain ? `${hashPath}?${remain}` : hashPath;
}
history.replaceState(null, '', url.toString());
}
async function getOpenidByCode() {
// 获取当前环境配置
const config = window.APP_CONFIG.getConfig();
try {
// 获取原始 URL 查询参数
const params = getUrlParams();
// 请求接口获取跳转域名
const response = await apiPost(config.baseURL + '/users/wxOpenid',{
code: getQueryString('code'),
is_wap: 0,
is_miniapp: 0,
});
if (response.status === 200 && response.data) {
// 直接传入原始参数,内部会根据路径自动生成 short_key 和对应 hash 路径
localStorage.setItem('wechatBrowserOpenId', response.data.openid)
// 清除 URL 中的 code,避免后续重复使用失效 code 导致循环
removeCodeFromUrl()
await getJumpUrl()
} else {
// code 换 openid 失败,清除失效 code,避免刷新后反复重试
removeCodeFromUrl()
showError(response.msg || '微信授权登录失败,请刷新重试');
}
} catch (error) {
console.error('Redirect error:', error);
removeCodeFromUrl()
showError('网络请求失败,请稍后重试');
}
}
async function getJumpUrl() {
// 获取当前环境配置
const config = window.APP_CONFIG.getConfig();
try {
// 获取原始 URL 查询参数
const params = getUrlParams();
// 请求接口获取跳转域名
const response = await apiGet(config.baseURL + '/system/miniAppUrl');
if (response.status === 200 && response.data) {
// 直接传入原始参数,内部会根据路径自动生成 short_key 和对应 hash 路径
redirect(response.data.short_link, params);
} else {
showError(response.msg || '获取跳转地址失败');
}
} catch (error) {
console.error('Redirect error:', error);
showError('网络请求失败,请稍后重试');
}
}
// 主流程
async function init() {
// 获取当前环境配置
const config = window.APP_CONFIG.getConfig();
if(isWeChatBrowser()) {
// 获取当前环境配置
let openid = localStorage.getItem('wechatBrowserOpenId');
const code = getQueryString('code');
// 1. 有 code:用 code 换 openid(内部会清除 code,避免重复使用失效 code)
if(code) {
// 已成功带回 code,清除授权跳转标记
sessionStorage.removeItem('wxAuthPending')
await getOpenidByCode()
return false
}
// 2. 有 openid:直接获取跳转地址
if(openid) {
await getJumpUrl()
return false
}
// 3. 无 openid 无 code:跳转第三方授权(需防止「跳过去-回来没 code-又跳过去」的死循环)
if(sessionStorage.getItem('wxAuthPending')) {
// 刚跳转过第三方却没带回 code,不再重复跳转,避免无限循环
sessionStorage.removeItem('wxAuthPending')
showError('微信授权失败,未获取到授权码,请刷新页面重试')
return false
}
sessionStorage.setItem('wxAuthPending', '1')
let url = `${config.thirdLoginUrl}/thirdLogin?type=wxpay&back=&redirect_uri=${encodeURIComponent(location.href)}&loginType=2`
window.location.replace(url)
return false
} else {
await getJumpUrl()
}
}
// 页面加载后立即执行
document.addEventListener('DOMContentLoaded', init);
</script>
</body>
</html>
最近查询
jianfei86.comwww.360vryun.cnwwe.olgaaibar.com13759878995.com92340104ma8qu83c8p.0518fc.cnwww.ch-craftsman.comwww.lingoes.cnjunye88.comyndf.netsyfls.com.cnshandongyuanke.comwww.thera-bandacademy.com520504.comwww.mmqqhr.gov.cnwww.scjijiang.commpytfgu.cnwww.rqtyq168.qy6.com107cloud.cn1421wwwww.jd1.edisu.cncangku.comwww.5fx.comg.0759mm.comwws.radiosantaana.comtwinkcocktube.comwww.mastli.comszbxc88.com92150521ma0nbl2y6h.bjchaoshi.com.cnbjswzpyjh.comwww.nbqykj.cnwww.lyhb.net.cnwww.djcmq.cnfengshui195.nhsbc.comszdelaoshi.coma13826562112.qjy168.com5878888.cnshthcpa.cnwww.dheh.cnwww.lang-chi.net136.wanbibi.comwww.hl007.coma35cn.cmlogun.comwww.guangliangsi.comwww.lieshu.ccwwww.ngtdzm.com30647.qirejuwang.cn234255.szrfdq.comwww.suzhouzj.comjvnix.comwww.19391.comjtgj365.comhall-wafer.comquputravel.comzoneland.netwww.cpqc-china.com275968.texindex.com.cnklxxsxydwjdqsd-huang-yong.bjchaoshi.com.cnhz.gxnews.com.cnffxiv07.compc188.netwww.xinhui-zy.com