/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/is/isDaTing.js
/**
* showdoc
* @catalog is
* @title isDaTing
* @description 判断是否是大厅环境
调用方式: import { isDaTing } from '@q/360game_public/lib/is/isDaTing';
* @method null
* @url null
* @return bool
* @return_param bool Boolean 是否是大厅环境,true是false否
* @remark 暂无
*/
var ret,
isDT = false;
try {
ret = external.AppCmdSync("getLocalInfo", "getLocalInfo", JSON.stringify({
type: "is360Game"
}), "");
if (ret) {
isDT = true;
}
} catch (error) {
isDT = false;
}
var isDaTing = isDT;
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getClientInfo.js
/**
* showdoc
* @catalog get
* @title getClientInfo
* @description 获取客户端的信息
调用方式: import { clientInfo } from '@q/360game_public/lib/get/getClientInfo';
* @method null
* @url null
* @return {"appver":"","uid":"","pid":"","mid":"","m":"","m2":"","from":"","yid":"","cpid":""}
* @return_param appver string 客户端版本号
* @return_param uid string 客户端用户id,userID
* @return_param pid string 客户端渠道号
* @return_param mid string 客户端mid
* @return_param m string 客户端m,等同于mid
* @return_param m2 string 客户端m2
* @return_param from string 客户端的启动来源
* @return_param yid string 客户端用户的分享来源,来自某某某的分享
* @return_param cpid string 客户端渠道号
* @remark 1.在360浏览器中可以获取到mid和m2,在别的浏览器中mid和m2
2.在浏览器中的版本号appver为1.0.0.0000
*/
var clientInfoString;
function getBrowserInfo() {
try {
return external.GetVersion(external.GetSID(window));
} catch (e) {
return '15.2.0000.0';
}
}
function compareWechatVersion(v1, v2) {
v1 = v1.split('.');
v2 = v2.split('.');
var len = Math.max(v1.length, v2.length);
while (v1.length < len) {
v1.push('0');
}
while (v2.length < len) {
v2.push('0');
}
for (var i = 0; i < len; i++) {
var num1 = parseInt(v1[i]);
var num2 = parseInt(v2[i]);
if (num1 > num2) {
return 1;
} else if (num1 < num2) {
return -1;
}
}
return 0;
}
function isWxInstalled() {
try {
var data = JSON.parse(window.external.AppCmdSync('getLocalInfo', 'getLocalInfo', JSON.stringify({
type: 'isWeChatInstalled'
}), ''));
if (data.return === 'true') {
if (compareWechatVersion(data.appver, '3.9.12') >= 0) {
return true;
} else {
return false;
}
} else {
return false;
}
} catch (error) {
return false;
}
}
function getClientInfoString() {
try {
return JSON.stringify(Object.assign(JSON.parse(external.AppCmdSync('getClientInfo', 'getClientInfo', '', '')), {
isWxInstalled: isWxInstalled(),
bver: getBrowserInfo()
}));
} catch (error) {
console.log(error);
return JSON.stringify(Object.assign(JSON.parse('{"appver":"","uid":"","pid":"","mid":"","m":"","m2":"","from":"","yid":"","cpid":""}'), {
isWxInstalled: isWxInstalled(),
bver: getBrowserInfo()
}));
}
}
clientInfoString = getClientInfoString();
var clientInfos = JSON.parse(clientInfoString);
if (!isDaTing) {
try {
clientInfos.mid = window.external.GetMID(window.external.GetSID(window));
window.external.AppCmd(window.external.GetSID(window), '', 'GetMID2', '1', '', function (code, ret) {
clientInfos.m2 = ret;
});
} catch (error) {
clientInfos.mid = '';
clientInfos.m2 = '';
}
clientInfos.appver = '1.0.0.0000';
}
var clientInfo = clientInfos;
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getDataset.js
/**
* showdoc
* @catalog get
* @title getDataset
* @description 兼容IE获取元素的dataset自定义属性
调用方式: import { getDataset } from '@q/360game_public/lib/get/getDataset';
* @method null
* @url null
* @param element 必选 Element 要获取自定义属性的元素
* @return {"aaaa":"1111","bbBb":"2222","ccCcCc":"3333"}
* @return_param aaaa string 元素上绑定的自定义属性名称
* @remark 1.自定义的属性字段中若含有```-```,则整个数据字段会转化为驼峰式写法
2.例:```data-a-b```转化为```aB```
*/
function getDataset(element) {
if (element.dataset) {
return element.dataset;
} else {
var attrs = element.attributes,
// 元素的属性集合
dataset = {},
name,
matchStr;
for (var i = 0; i < attrs.length; i++) {
// 是否是data- 开头
matchStr = attrs[i].name.match(/^data-(.+)/);
if (matchStr) {
// data-auto-play 转成驼峰写法 autoPlay
name = matchStr[1].replace(/-([\da-z])/gi, function (all, letter) {
return letter.toUpperCase();
});
dataset[name] = attrs[i].value;
}
}
return dataset;
}
}
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getDefaultTab.js
/**
* showdoc
* @catalog get
* @title getDefaultTab
* @description 获取大厅默认展示的tab
调用方式: import { getDefaultTab } from '@q/360game_public/lib/get/getDefaultTab';
* @method null
* @url null
* @return {"tabId":"1","tabUrl":"https:\/\/s5.360game.360.cn"}
* @return_param tabId string 客户端默认展示的页码
* @return_param tabUrl string 客户端默认展示的url
* @remark tabId值为```0```,表示```我的```tab页面,值为```1```,表示```发现```tab页面
*/
function getDefaultTab() {
var data = "";
try {
data = JSON.parse(external.AppCmdSync("getLocalInfo", "getLocalInfo", JSON.stringify({
type: "getTabId"
}), ""));
} catch (error) {
data = {
tabId: "0",
tabUrl: ""
};
}
return data;
}
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getGamekey.js
/**
* showdoc
* @catalog get
* @title getGamekey
* @description 获取游戏对应的appkey
调用方式: import { getGamekey } from '@q/360game_public/lib/get/getGamekey';
* @method null
* @url null
* @param obj 必选 Object 对应游戏的数据对象
* @return '123456'
* @remark 1.接受的参数是一个对象
2.对象里有gdata或者_g_data之一的json字符串
*/
function getGamekey(obj) {
var _gd$type, _gd$gtype, _gd2, _gd3;
var gd = null;
try {
gd = JSON.parse(obj.gdata || obj._g_data);
} catch (error) {
gd = obj.gdata || obj._g_data;
}
var type = ((_gd$type = gd.type) === null || _gd$type === void 0 ? void 0 : _gd$type.toLowerCase()) || ((_gd$gtype = gd.gtype) === null || _gd$gtype === void 0 ? void 0 : _gd$gtype.toLowerCase());
if (type == "androidgame") {
var _gd;
return (_gd = gd) === null || _gd === void 0 ? void 0 : _gd.gameid;
}
return ((_gd2 = gd) === null || _gd2 === void 0 ? void 0 : _gd2.gkey) || ((_gd3 = gd) === null || _gd3 === void 0 ? void 0 : _gd3.appid) || (obj === null || obj === void 0 ? void 0 : obj.gkey) || (obj === null || obj === void 0 ? void 0 : obj.appid) || "";
}
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getUserInfo.js
/**
* showdoc
* @catalog get
* @title getUserInfo
* @description 获取用户信息
调用方式: import { userInfo } from '@q/360game_public/lib/get/getUserInfo';
* @method null
* @url null
* @return {"user":{"nickname":"","qid":"","username":""}}
* @return_param user Object 用户信息对象
* @return_param nickname String 用户昵称
* @return_param qid String 用户qid
* @return_param username String 用户名
* @remark ```nickname```,```qid```,```username```三个字段都在```user```这个对象内部
*/
function getUserInfoString() {
var data = "";
try {
data = external.AppCmdSync("getLocalInfo", "getLocalInfo", JSON.stringify({
type: "userInfo"
}), "");
var a = JSON.parse(data); // 兼容卫士错误处理
if (!data) {
data = '{"user":{"nickname":"","qid":"","username":""}}';
}
} catch (error) {
data = '{"user":{"nickname":"","qid":"","username":""}}';
}
return data;
}
var userInfoStrings = getUserInfoString();
var userInfos = {
user: {
nickname: "",
qid: "",
username: ""
}
};
if (userInfoStrings.length != 0) {
userInfos = JSON.parse(userInfoStrings);
}
var userInfo = userInfos;
/* harmony default export */ var getUserInfo = (getUserInfoString);
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/getUserInfoApi.js
/**
* showdoc
* @catalog get
* @title getUserInfoApi
* @description 获取用户信息的接口
调用方式: import { getUserInfoApi } from '@q/360game_public/lib/get/getUserInfoApi';
* @method null
* @url null
* @return Promise.resolve(data)或者Promise.reject(data)
* @return_param data Object 调用接口api的返回信息
* @remark 该方法返回一个```Promise```!!!!!!!
*/
function getUserInfoApi() {
return new Promise(function (resolve, reject) {
$.ajax({
type: 'get',
url: 'https://v5.360game.360.cn/homeapi/user/profile',
data: '',
dataType: 'jsonp',
success: function success(data) {
if (data.errno == 0) {
resolve(data.data);
} else {
reject(data);
}
},
error: function error(err) {
reject(err);
}
});
});
}
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/get/index.js
// CONCATENATED MODULE: ./node_modules/@q/360game_public_v8/lib/other/imgOptimize.js
/**
* showdoc
* @catalog other
* @title imgOptimize
* @description 图片优化webp
调用方式: import { imgOptimize } from '@q/360game_public/lib/other/imgOptimize';
* @method null
* @url null
* @param url 必选 String 要转化格式的图片地址
* @return url
* @return_param url string 将后缀修改为webp格式的图片地址
* @remark 目前仅支持静态图床上传的图片资源
*/
var canUseWebp = function () {
var elem = document.createElement("canvas");
if (elem.getContext && elem.getContext("2d")) {
return elem.toDataURL("image/webp").indexOf("data:image/webp") === 0;
} else {
return false;
}
}();
function checkUrl(url) {
try {
// 标准化 URL:如果以 // 开头,补充为 http://
if (url.startsWith("//")) {
url = "http:" + url;
}
// 解析 URL
var urlObj = new URL(url);
// 检测域名
var hostname = urlObj.hostname.toLowerCase();
var isDomainMatch = hostname.includes("img.360kuai.com") || hostname.includes("qhimg.com");
// 检测路径层级
var pathParts = urlObj.pathname.split("/").filter(function (p) {
return p !== "";
}); // 过滤空字符串
var isPathValid = pathParts.length === 1;
return isDomainMatch && isPathValid;
} catch (error) {
console.error("URL 解析失败:", error);
return false;
}
}
function imgOptimize(url) {
if (!url) return false;
if (checkUrl(url) && canUseWebp) {
return url.replace(/\.(jpg|png|jpeg|svg|gif)$/, ".webp");
}
return url;
}
// CONCATENATED MODULE: ./src/pages/home/inject.js
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var cver = clientInfo.appver;
var bver = clientInfo.bver;
var mid = clientInfo.mid;
var m2 = clientInfo.m2;
var from = clientInfo.from || '';
var qid = userInfo.user.qid || '';
var isOldUser = clientInfo.isOldUser || '0';
var LunBoController = new AbortController();
var LunBoSignal = LunBoController.signal;
window.Frame = {
api: {
GetSID: function GetSID() {
if (Frame.api.sid) {
return Frame.api.sid;
}
try {
Frame.api.sid = external.GetSID(window);
return Frame.api.sid;
} catch (e) {
return '';
}
},
GetMID: function GetMID() {
if (Frame.api.mid) {
return Frame.api.mid;
}
Frame.api.mid = Frame.api.GetSID() && external.GetMID(Frame.api.sid);
return Frame.api.mid;
}
},
sendGif: function sendGif(filename, data) {
var files = [];
if (Object.prototype.toString.call(filename) == '[object String]') {
files.push(filename);
} else if (Object.prototype.toString.call(filename) == '[object Array]') {
files = filename;
} else {
return;
}
if (!Array.prototype.forEach) {
Array.prototype.forEach = function forEach(callback, thisArg) {
var T, k;
if (this == null) {
throw new TypeError('this is null or not defined');
}
var O = Object(this);
var len = O.length >>> 0;
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
if (arguments.length > 1) {
T = thisArg;
}
k = 0;
while (k < len) {
var kValue;
if (k in O) {
kValue = O[k];
callback.call(T, kValue, k, O);
}
k++;
}
};
}
files.forEach(function (item) {
var params = '';
if (data && _typeof(data) == 'object') {
for (var k in data) {
params += k + '=' + data[k] + '&';
}
}
new Image().src = 'https://dd.browser.360.cn/static/a/' + item + '?' + params + 'mid=' + Frame.api.GetMID() + '&' + Date.now() + Math.random().toString().replace('0.', '').substr(0, 10);
});
}
};
// 反作弊逻辑
window.__qa__ = {
modid: mid || 'yqlmmidnull',
channel_id: clientInfo.yid || 'h_360game',
app_id: '128',
appver: cver,
mid2: m2
};
document.addEventListener('DOMContentLoaded', function () {
setTimeout(function () {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = 'https://s.ssl.qhres2.com/pkg/anti_captcha/analytics/v1.1.1/analytics.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
}, 500);
});
// 初始化应用宝参数
tencentAppStore();
// 打点以及图片优化逻辑
try {
if (!window.bannerData) {
var _document$cookie$matc;
var guid = ((_document$cookie$matc = document.cookie.match(/(?<=__guid=)[^;=]*(?=;)/)) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc[0]) || '';
fetch("".concat(isDaTing || location.href.includes('hao.360game8.360.cn') ? 'https://gameapi.browser.360.cn/game/v81/webslide' : 'https://v5.360game.360.cn/v81/web/slide.html', "?").concat(jsonToQueryString({
cver: cver,
mid: mid || guid || 'c7dc2f63d0e2edfe880d6add7bc53e51',
m2: m2,
from: from,
isOldUser: isOldUser,
bver: bver,
qid: qid,
tuijian: isDaTing || location.href.includes('hao.360game8.360.cn') ? '1' : ''
}), "&").concat(jsonToQueryString(window.$reqParams || {})), {
signal: LunBoSignal,
priority: 'high'
}).then(function (response) {
return response.json();
}).then(function (data) {
console.log(data);
var bannerData = null;
if (isDaTing || location.href.includes('hao.360game8.360.cn')) {
bannerData = data.data.list;
} else {
bannerData = data.data;
}
var firstImg = null;
if (bannerData[0].imptk) {
firstImg = imgOptimize(bannerData[0].img);
} else if (bannerData[0].gnid) {
var opext = {};
try {
opext = JSON.parse(bannerData[0].op_ext);
firstImg = opext.slide_big;
} catch (error) {}
} else {
firstImg = bannerData[0].img_b;
}
// let img = new Image()
// img.src = imgOptimize(firstImg)
window.bannerData = data;
var preloadLink = document.createElement('link');
preloadLink.rel = 'preload';
preloadLink.as = 'image';
// 最终真实加载的图片是 https 协议的
preloadLink.href = firstImg ? imgOptimize(firstImg).replace(/\bhttp:/g, 'https:') : '';
// console.log(`%c inject preloadImg`, 'color:white;background:red;font-size:20px;', preloadLink.href)
preloadLink.setAttribute('fetchpriority', 'high');
preloadLink.crossOrigin = 'anonymous';
document.head.insertAdjacentElement('afterbegin', preloadLink);
});
}
} catch (error) {
console.log(error);
}
function tencentAppStore() {
if (!window.$reqParams && window.QIHOO_SYH_AD_LIB_EXTERLLQ_CTC) {
// eslint-disable-next-line no-undef
try {
window.$wxFns = new window.QIHOO_SYH_AD_LIB_EXTERLLQ_CTC({
sourceId: 'gamehall' // 媒体来源标识-必填
});
var _wxfns = window.$wxFns.getRequestParams({
sourceId: 'gamehall',
// 媒体来源标识-必填
hasYlhTaid: true // 非必填, 是否获取优量汇画像并返回
});
_wxfns.rta_info = _wxfns.rta_info;
_wxfns.rta_iv = _wxfns.rta_iv;
window.$reqParams = _wxfns;
} catch (e) {}
}
}
function jsonToQueryString(obj) {
return Object.keys(obj).map(function (key) {
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(obj[key]));
}).join('&');
}
/***/ })
/******/ ]);