/******/ (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('&'); } /***/ }) /******/ ]);