ios低版本globalThis不存在的解决方法

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:ios低端版本,在vue-cli打包的时候,部分代码打出来生成了globalThis这个对象,但是ios低端版本不能识别

解决方案:在index.html页面引入以下的js链接

<script src="https://unpkg.com/@ungap/global-this@0.4.4/min.js"></script>

附言:有些公司内网环境可能有限制,导致引入该js会阻塞,需要等很久,可以尝试注释掉

 今天是从业六年以来第6篇分享文章,也算是个进步吧,一天进步一点点,加油

好,今天的方法就分享到这里,如果各位有什么不明白的,可以在评论下留言,大家一起探讨。我是三井寿,一个永不放弃的男人!
在这里插入图片描述

// ====== 环境修复与全局对象安全 ====== (function() { // 安全获取全局对象的函数(支持严格模式和所有环境) const getGlobalObject = () => { // 1. 优先使用现代标准 globalThis if (typeof globalThis !== &#39;undefined&#39;) return globalThis; // 2. 处理严格模式限制 try { const globalFromFn = Function(&#39;return this&#39;)(); if (globalFromFn) return globalFromFn; } catch (e) { console.warn(&#39;[EnvFix] Function constructor blocked in strict mode&#39;); } // 3. 环境特定对象 if (typeof global !== &#39;undefined&#39;) return global; // Node.js if (typeof window !== &#39;undefined&#39;) return window; // 浏览器 if (typeof self !== &#39;undefined&#39;) return self; // Web Worker // 4. Cocos Creator 原生环境特殊处理 if (typeof cc !== &#39;undefined&#39; && cc.sys && cc.sys.__globalAdapter) { return cc.sys.__globalAdapter; } // 5. 最后手段:创建新的全局对象 console.error(&#39;[EnvFix] Unable to determine global object, creating new&#39;); return {}; }; const globalObj = getGlobalObject(); // 修复关键全局变量(使用 Object.defineProperty 防止覆盖) const defineGlobal = (name, value) => { if (typeof globalObj[name] === &#39;undefined&#39;) { Object.defineProperty(globalObj, name, { value, writable: true, configurable: true, enumerable: true }); console.log(`[EnvFix] Defined global: ${name}`); } }; // 定义关键全局对象 defineGlobal(&#39;global&#39;, globalObj); defineGlobal(&#39;self&#39;, globalObj); defineGlobal(&#39;globalThis&#39;, globalObj); defineGlobal(&#39;window&#39;, globalObj); // 原生平台特殊处理 if (cc && cc.sys && cc.sys.isNative) { // 确保 XMLHttpRequest 存在 if (typeof XMLHttpRequest === &#39;undefined&#39;) { defineGlobal(&#39;XMLHttpRequest&#39;, function() { return cc.loader.getXMLHttpRequest(); }); } // 确保 document 对象存在 if (typeof document === &#39;undefined&#39;) { defineGlobal(&#39;document&#39;, { createElement: () => ({ appendChild: () => {} }), head: { appendChild: () => {} }, body: { appendChild: () => {} } }); } // 确保 location 对象存在 if (typeof location === &#39;undefined&#39;) { defineGlobal(&#39;location&#39;, { href: &#39;file://&#39;, protocol: &#39;file:&#39;, hostname: &#39;localhost&#39;, host: &#39;localhost&#39;, origin: &#39;file://&#39; }); } console.log(&#39;[EnvFix] Native environment patched&#39;); } // 确保 require 函数存在 if (typeof globalObj.require === &#39;undefined&#39;) { defineGlobal(&#39;require&#39;, function(module) { if (globalObj.__modules && globalObj.__modules[module]) { return globalObj.__modules[module]; } console.warn(`[RequireFallback] Module &#39;${module}&#39; not found`); return {}; }); } })(); // ====== 引擎初始化保护系统 ====== const EngineReady = (function() { let _promise = null; let _resolve = null; let _isReady = false; let _checkInterval = null; const safeCheckEngine = () => { // 引擎已初始化 if (cc && cc.game && cc.game._isEngineInited) { return true; } // 尝试监听初始化事件 if (cc && cc.game && cc.game.once) { const eventName = cc.game.EVENT_ENGINE_INITED || &#39;engine-inited&#39;; cc.game.once(eventName, () => { _resolve && _resolve(); _isReady = true; _checkInterval && clearInterval(_checkInterval); }); return true; } return false; }; return { get isReady() { return _isReady; }, get promise() { return _promise; }, init() { if (!_promise) { _promise = new Promise(resolve => { _resolve = () => { _isReady = true; resolve(); _checkInterval && clearInterval(_checkInterval); }; // 首次检查 if (safeCheckEngine()) return; // 轮询检查 _checkInterval = setInterval(() => { safeCheckEngine() && _resolve(); }, 100); }); } return _promise; }, safeAccess(callback) { if (_isReady) { try { return callback(); } catch (e) { console.error(&#39;[EngineSafe] Error:&#39;, e); } } return _promise.then(callback).catch(e => { console.error(&#39;[EngineSafe] Async error:&#39;, e); }); } }; })(); EngineReady.init(); // ====== 游戏主入口 ====== async function gameMainEntry() { try { console.log(&#39;[Main] Waiting for engine initialization...&#39;); await EngineReady.promise; console.log(&#39;[Main] Engine ready&#39;); // 基本引擎配置 EngineReady.safeAccess(() => { if (cc.view) { cc.view.enableRetina(true); cc.view.resizeWithBrowserSize(true); cc.view.setDesignResolutionSize(960, 640, cc.ResolutionPolicy.SHOW_ALL); } }); // 加载SDK await loadGravityEngineSDK(); // 加载启动场景 await loadStartScene(); } catch (error) { console.error(&#39;[Main] Initialization failed:&#39;, error); try { cc.director.loadScene(&#39;start&#39;); } catch (fallbackError) { displayErrorFallback(&#39;启动失败\n请重启应用&#39;); } } } // 错误显示后备方案 function displayErrorFallback(message) { try { const errorDiv = document.createElement(&#39;div&#39;); errorDiv.style.cssText = ` position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: black; color: white; display: flex; justify-content: center; align-items: center; z-index: 9999; font: 24px Arial, sans-serif; text-align: center; white-space: pre-line; padding: 20px; `; errorDiv.textContent = message; document.body.appendChild(errorDiv); } catch (e) { console.error(&#39;[Fallback] Display failed:&#39;, e); } } // ====== SDK加载器增强版 ====== async function loadGravityEngineSDK() { // 使用相对路径解决加载问题 const sdkPaths = [ &#39;./assets/_plugs/lib/gravityengine.mg.cocoscreator.min.js&#39;, &#39;_plugs/lib/gravityengine.mg.cocoscreator.min.js&#39;, &#39;lib/gravityengine.mg.cocoscreator.min.js&#39; ]; for (const path of sdkPaths) { try { // 关键修复:在加载 SDK 前确保全局对象完整 ensureGlobalEnvironment(); // JSB 特殊处理:使用 require 加载 if (cc.sys.isNative && cc.sys.__globalAdapter?.require) { cc.sys.__globalAdapter.require(path); console.log(&#39;[SDK] Native require loaded:&#39;, path); } else { await loadScript(path); console.log(&#39;[SDK] Loaded from:&#39;, path); } // 关键修复:加载后再次检查全局对象 ensureGlobalEnvironment(); initGravityEngine(); return; } catch (e) { console.warn(&#39;[SDK] Load failed:&#39;, path, e.message); } } console.error(&#39;[SDK] All paths failed&#39;); handleSDKLoadFailure(); } function ensureGlobalEnvironment() { // 获取全局对象 const getGlobalObject = () => { if (typeof globalThis !== &#39;undefined&#39;) return globalThis; if (typeof global !== &#39;undefined&#39;) return global; if (typeof window !== &#39;undefined&#39;) return window; if (typeof self !== &#39;undefined&#39;) return self; return Function(&#39;return this&#39;)() || {}; }; const globalObj = getGlobalObject(); // 确保 self 在所有环境中都存在 if (typeof self === &#39;undefined&#39;) { console.warn(&#39;[GlobalFix] self is undefined, patching...&#39;); Object.defineProperty(globalObj, &#39;self&#39;, { value: globalObj, writable: true, configurable: true, enumerable: true }); } // 确保其他关键全局对象存在 const requiredGlobals = [&#39;window&#39;, &#39;global&#39;, &#39;globalThis&#39;, &#39;document&#39;, &#39;location&#39;]; requiredGlobals.forEach(name => { if (typeof globalObj[name] === &#39;undefined&#39;) { console.warn(`[GlobalFix] ${name} is undefined, patching...`); Object.defineProperty(globalObj, name, { value: globalObj, writable: true, configurable: true, enumerable: true }); } }); // 原生平台特殊处理 if (cc && cc.sys && cc.sys.isNative) { // 确保 location 对象存在 if (typeof location === &#39;undefined&#39;) { Object.defineProperty(globalObj, &#39;location&#39;, { value: { href: &#39;file://&#39;, protocol: &#39;file:&#39;, hostname: &#39;localhost&#39; }, writable: false, configurable: false, enumerable: true }); } } } function loadScript(path) { return new Promise((resolve, reject) => { // 优先使用 Cocos 的加载系统 if (cc.assetManager?.loadScript) { cc.assetManager.loadScript(path, (err) => { if (err) { // 原生平台特殊处理 if (cc.sys.isNative) { console.warn(&#39;[SDK] Using native fallback for script loading&#39;); try { // 原生平台直接执行脚本 const jsb = cc.sys.__globalAdapter; if (jsb && jsb.require) { jsb.require(path); return resolve(); } } catch (nativeError) { console.error(&#39;[SDK] Native require failed:&#39;, nativeError); } } reject(err); } else { resolve(); } }); return; } // 后备方案:直接创建 script 标签 try { const script = document.createElement(&#39;script&#39;); script.src = path; script.onload = () => resolve(); script.onerror = () => reject(new Error(`Failed to load ${path}`)); document.head.appendChild(script); console.warn(&#39;[SDK] Using DOM fallback for script loading&#39;); } catch (e) { reject(e); } }); } function initGravityEngine() { let GravityEngine = null; // 1. 尝试标准方式获取 if (typeof GravityEngine === &#39;function&#39;) { console.log(&#39;[SDK] GravityEngine found in local scope&#39;); } // 2. 尝试从全局对象中查找 else if (typeof window.GravityEngine === &#39;function&#39;) { GravityEngine = window.GravityEngine; console.warn(&#39;[SDK] Found GravityEngine in window object&#39;); } // 3. 尝试从其他全局对象中查找 else if (typeof global.GravityEngine === &#39;function&#39;) { GravityEngine = global.GravityEngine; console.warn(&#39;[SDK] Found GravityEngine in global object&#39;); } // 4. 尝试从 self 对象中查找 else if (typeof self.GravityEngine === &#39;function&#39;) { GravityEngine = self.GravityEngine; console.warn(&#39;[SDK] Found GravityEngine in self object&#39;); } // 5. 最后尝试从 globalThis 中查找 else if (typeof globalThis.GravityEngine === &#39;function&#39;) { GravityEngine = globalThis.GravityEngine; console.warn(&#39;[SDK] Found GravityEngine in globalThis object&#39;); } else { console.error(&#39;[SDK] GravityEngine not found&#39;); return; } try { // 使用您的 AppID 624768904 GravityEngine.init({ appId: &#39;624768904&#39;, enableLog: true }); console.log(&#39;[SDK] GravityEngine initialized with AppID 624768904&#39;); } catch (e) { console.error(&#39;[SDK] Init failed:&#39;, e); } } function handleSDKLoadFailure() { console.warn(&#39;[SDK] Using fallback analytics&#39;); window.GravityEngine = { init: () => console.warn(&#39;SDK unavailable&#39;), trackEvent: () => {} }; } // ====== 场景加载器 ====== async function loadStartScene() { try { // 加载主资源包 await new Promise((resolve) => { if (!cc.assetManager?.loadBundle) { console.warn(&#39;[Scene] AssetManager unavailable&#39;); return resolve(); } cc.assetManager.loadBundle(&#39;main&#39;, (err) => { if (err) console.error(&#39;[Scene] Bundle load error:&#39;, err); resolve(); }); }); // 加载场景 if (cc.director?.loadScene) { cc.director.loadScene(&#39;start&#39;); } else { throw new Error(&#39;Director unavailable&#39;); } } catch (error) { console.error(&#39;[Scene] Load failed:&#39;, error); try { cc.director.loadScene(&#39;start&#39;); } catch (e) { throw new Error(&#39;Fallback scene load failed&#39;); } } } // ====== UI_Entry组件 ====== const { ccclass, property } = cc._decorator; @ccclass export default class UI_Entry extends cc.Component { @property(cc.ProgressBar) progress_loading = null; loginTimeoutHandler = null; onLoad() { EngineReady.safeAccess(() => { try { cc.director.getCollisionManager().enabled = true; this._show(); } catch (e) { console.error(&#39;[UI] onLoad error:&#39;, e); this.startLoadGame(); } }).catch(e => { console.error(&#39;[UI] Engine access error:&#39;, e); this.startLoadGame(); }); } onDestroy() { this.loginTimeoutHandler && cc.Tween.stop(this.loginTimeoutHandler); } async _show() { this.progress_loading.progress = 0; // 平台SDK初始化 if (cc.sys.isBrowser) { try { await this.initYPSDK(); } catch (e) { console.error(&#39;[YPSDK] Init failed:&#39;, e); this.startLoadGame(); } } else { this.startLoadGame(); } // 登录超时保护 this.setLoginTimeout(); } setLoginTimeout() { if (cc.tween) { this.loginTimeoutHandler = cc.tween(this) .delay(10) .call(() => { console.warn(&#39;[Login] Timeout after 10s&#39;); this.startLoadGame(); }) .start(); } else { setTimeout(() => this.startLoadGame(), 10000); } } async initYPSDK() { if (typeof YPSDK === &#39;undefined&#39;) { console.warn(&#39;[YPSDK] SDK unavailable&#39;); return; } const config = { gameChannelList: { h5: { platformType: "h5", version: "1.0.0" }, tt: { platformType: "tt", appId: "tt09297f94961f881b02" }, wx: { platformType: "wx", appId: "wx6baaaa27ab5186ff" } } }; await YPSDK.init(39, "https://platform-shop-dev.hanyougame.com", config); await YPSDK.login(); if (YPSDK.setLoginCallBack) { YPSDK.setLoginCallBack(success => { if (!success) return; // 取消超时 this.loginTimeoutHandler && cc.Tween.stop(this.loginTimeoutHandler); // 初始化分析SDK if (r_GravityPlatform.default?.GA_Init) { r_GravityPlatform.default.GA_Init(YPSDK.Platform.loginData.bindingId); } this.startLoadGame(); }); } else { this.startLoadGame(); } } startLoadGame() { const tasks = [ this._loadGameConfig, this._loadRemoteConfig, this._loadExcelData, this._loadUserData, this._loadCommonBundle, this._loadMainBundle ].map(fn => fn.bind(this)); this.executeTasks(tasks, () => this._loadGame()); } executeTasks(tasks, finalCallback) { let completed = 0; const total = tasks.length; const runTask = async (index) => { if (index >= total) { finalCallback(); return; } try { await tasks[index](); completed++; this._setProgress(completed / total); runTask(index + 1); } catch (e) { console.error(`[Task ${index}] Failed:`, e); completed++; this._setProgress(completed / total); runTask(index + 1); // 继续执行后续任务 } }; runTask(0); } async _loadExcelData() { if (!r_ExcelLoader?.ExcelLoader?.loadAll) { console.warn(&#39;[Data] ExcelLoader unavailable&#39;); return; } await r_ExcelLoader.ExcelLoader.loadAll(); console.log(&#39;[Data] Excel loaded&#39;); } async _loadGameConfig() { if (!r_ResLoader.default?.loadRes) { console.warn(&#39;[Config] ResLoader unavailable&#39;); return; } const jsonAsset = await r_ResLoader.default.loadRes( "resources", "config/GameConfig", cc.JsonAsset ); if (jsonAsset && r_GameConfig.default) { r_GameConfig.default.appConfig = jsonAsset.json; jsonAsset.decRef && jsonAsset.decRef(); console.log(&#39;[Config] Game config loaded&#39;); } } async _loadRemoteConfig() { if (!r_GameConfig.default?.appConfig?.RemoteUrl) { console.warn(&#39;[Config] RemoteUrl not set&#39;); return; } const remoteUrl = r_GameConfig.default.appConfig.RemoteUrl; const remotePath = cc.path.join(remoteUrl, "ADConfig.json"); try { const remoteConfig = await r_ResLoader.default.loadRemote(remotePath, { ext: ".json" }); if (remoteConfig?.json && r_GravityPlatform.default) { r_GravityPlatform.default.videoId = remoteConfig.json.ADUnitId[0]; r_GameConfig.default.adConfig = remoteConfig.json; console.log(&#39;[Config] Remote config loaded&#39;); } } catch (e) { console.error(&#39;[Config] Remote load failed:&#39;, e); } } async _loadCommonBundle() { if (!r_ResLoader.default?.loadBundle) { console.warn(&#39;[Bundle] ResLoader unavailable&#39;); return; } try { await r_ResLoader.default.loadBundle(r_BundleConfig.BundleNames.Common); console.log(&#39;[Bundle] Common loaded&#39;); } catch (e) { console.error(&#39;[Bundle] Common load failed:&#39;, e); } } async _loadMainBundle() { if (!r_ResLoader.default?.loadBundle) { console.warn(&#39;[Bundle] ResLoader unavailable&#39;); return; } try { await r_ResLoader.default.loadBundle(r_BundleConfig.MainGameBundle); console.log(&#39;[Bundle] Main loaded&#39;); } catch (e) { console.error(&#39;[Bundle] Main load failed:&#39;, e); } } async _loadUserData() { try { // 音频初始化 r_AudioManager.AudioMgr?.init(); // 全局配置 r_GameGlobalVariable.GameGlobalVariable?.initPeiZhi(); // 网络检测 if (YPSDK?.Common?.curChannelData) { const platformType = YPSDK.Common.curChannelData.platformType; if (platformType === YPSDK.GamePlatformType.WX || platformType === YPSDK.GamePlatformType.TT) { r_YpNetMag.YpNetMag?.failSever(() => { r_YpNetMag.YpNetMag.isFail = true; }); } } // 用户数据初始化 if (YPSDK?.Platform?.loginData) { await r_YpNetMag.YpNetMag?.initServer(YPSDK.Platform.loginData); } } catch (e) { console.error(&#39;[User] Load failed:&#39;, e); } } _loadGame() { try { const guideIndex = r_PlayerDataManager.PlayerDataMgr.GetGuideIndexByTaskName( r_Const_Common.GuideName.战斗背包 ); if (guideIndex !== r_Const_Common.GameBagGuideIndex.引导完结) { // 新玩家流程 r_PlayerDataManager.PlayerDataMgr.GMSetGuideIndex?.( r_Const_Common.GuideName.战斗背包, r_Const_Common.GameBagGuideIndex.引导初始1 ); r_GameDataManager.GameDataMgr?.ClearGameBagData(); r_GameGlobalVariable.GameGlobalVariable.nowlevel = 1; r_UIManager.default?.open( r_BundleConfig.BundleNames.Game, r_UIConfig_Game.UIView_Game.UI_GameView ); } else { // 老玩家流程 r_EventManager.EventMgr?.dispatchEvent(r_EvenType.EVENT_TYPE.Game_Load_View, true); r_UIManager.default?.open( r_BundleConfig.BundleNames.Home, r_UIConfig_Home.UIView_Home.UI_Hall ); } // 白名单检查 this.checkWhiteList(); } catch (e) { console.error(&#39;[Game] Load failed:&#39;, e); try { cc.director.loadScene(&#39;start&#39;); } catch (sceneError) { console.error(&#39;[Game] Scene load failed:&#39;, sceneError); } } } async checkWhiteList() { try { if (!YPSDK?.Platform?.loginData || !YPSDK.platformUrl) return; const url = `${YPSDK.platformUrl}/User/GetCfgData?userId=${YPSDK.Platform.loginData.userUid}&keyId=NoVideo`; if (r_HttpManager.HttpMgr?.requestData) { r_HttpManager.HttpMgr.requestData(res => { if (res?.data?.keyData === "true") { r_PlayerDataManager.PlayerDataMgr.WHITE_NAME_NO_VIDEO = true; } }, url); } } catch (e) { console.error(&#39;[WhiteList] Check failed:&#39;, e); } } _setProgress(progress) { if (!this.progress_loading) return; this.progress_loading.progress = Math.max(0, Math.min(1, progress)); } } // ====== 启动游戏 ====== if (cc?.game?.run) { cc.game.run(() => { // 确保环境修复完成 ensureGlobalEnvironment(); gameMainEntry(); }); } else { setTimeout(() => { ensureGlobalEnvironment(); gameMainEntry(); }, 1000); } 针对上述问题 给我修改后的完整代码
最新发布
07-16
// ====== 环境修复与全局对象安全 ====== (function() { // 确保全局对象存在 const getGlobalObject = () => { if (typeof globalThis !== &#39;undefined&#39;) return globalThis; if (typeof global !== &#39;undefined&#39;) return global; if (typeof window !== &#39;undefined&#39;) return window; if (typeof self !== &#39;undefined&#39;) return self; return Function(&#39;return this&#39;)() || {}; }; const globalObj = getGlobalObject(); // 修复全局变量 if (typeof global === &#39;undefined&#39;) global = globalObj; if (typeof self === &#39;undefined&#39;) self = globalObj; if (typeof globalThis === &#39;undefined&#39;) globalThis = globalObj; // 确保require函数存在(关键修复) if (typeof globalObj.require === &#39;undefined&#39;) { globalObj.require = function(module) { // 简单实现require功能 if (globalObj.__modules && globalObj.__modules[module]) { return globalObj.__modules[module]; } console.warn(`[RequireFallback] Module &#39;${module}&#39; not found`); return {}; }; console.log(&#39;[EnvFix] Created fallback require function&#39;); } })(); // ====== 引擎初始化保护系统 ====== const EngineReady = (function() { let _promise = null; let _resolve = null; let _isReady = false; let _checkInterval = null; const safeCheckEngine = () => { // 引擎已初始化 if (cc && cc.game && cc.game._isEngineInited) { return true; } // 尝试监听初始化事件 if (cc && cc.game && cc.game.once) { const eventName = cc.game.EVENT_ENGINE_INITED || &#39;engine-inited&#39;; cc.game.once(eventName, () => { _resolve && _resolve(); _isReady = true; _checkInterval && clearInterval(_checkInterval); }); return true; } return false; }; return { get isReady() { return _isReady; }, get promise() { return _promise; }, init() { if (!_promise) { _promise = new Promise(resolve => { _resolve = () => { _isReady = true; resolve(); _checkInterval && clearInterval(_checkInterval); }; // 首次检查 if (safeCheckEngine()) return; // 轮询检查 _checkInterval = setInterval(() => { safeCheckEngine() && _resolve(); }, 100); }); } return _promise; }, safeAccess(callback) { if (_isReady) { try { return callback(); } catch (e) { console.error(&#39;[EngineSafe] Error:&#39;, e); } } return _promise.then(callback).catch(e => { console.error(&#39;[EngineSafe] Async error:&#39;, e); }); } }; })(); EngineReady.init(); // ====== 游戏主入口 ====== async function gameMainEntry() { try { console.log(&#39;[Main] Waiting for engine initialization...&#39;); await EngineReady.promise; console.log(&#39;[Main] Engine ready&#39;); // 基本引擎配置 EngineReady.safeAccess(() => { if (cc.view) { cc.view.enableRetina(true); cc.view.resizeWithBrowserSize(true); cc.view.setDesignResolutionSize(960, 640, cc.ResolutionPolicy.SHOW_ALL); } }); // 加载SDK await loadGravityEngineSDK(); // 加载启动场景 await loadStartScene(); } catch (error) { console.error(&#39;[Main] Initialization failed:&#39;, error); try { cc.director.loadScene(&#39;start&#39;); } catch (fallbackError) { displayErrorFallback(&#39;启动失败\n请重启应用&#39;); } } } // 错误显示后备方案 function displayErrorFallback(message) { try { const errorDiv = document.createElement(&#39;div&#39;); errorDiv.style.cssText = ` position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: black; color: white; display: flex; justify-content: center; align-items: center; z-index: 9999; font: 24px Arial, sans-serif; text-align: center; white-space: pre-line; padding: 20px; `; errorDiv.textContent = message; document.body.appendChild(errorDiv); } catch (e) { console.error(&#39;[Fallback] Display failed:&#39;, e); } } // ====== SDK加载器 ====== async function loadGravityEngineSDK() { // 使用相对路径解决加载问题 const sdkPaths = [ &#39;./assets/_plugs/lib/gravityengine.mg.cocoscreator.min.js&#39;, &#39;_plugs/lib/gravityengine.mg.cocoscreator.min.js&#39;, &#39;lib/gravityengine.mg.cocoscreator.min.js&#39; ]; for (const path of sdkPaths) { try { await loadScript(path); console.log(&#39;[SDK] Loaded from:&#39;, path); initGravityEngine(); return; } catch (e) { console.warn(&#39;[SDK] Load failed:&#39;, path, e.message); } } console.error(&#39;[SDK] All paths failed&#39;); handleSDKLoadFailure(); } function loadScript(path) { return new Promise((resolve, reject) => { // 优先使用Cocos的加载系统 if (cc.assetManager?.loadScript) { cc.assetManager.loadScript(path, (err) => { if (err) { reject(err); } else { resolve(); } }); return; } // 后备方案:直接创建script标签 try { const script = document.createElement(&#39;script&#39;); script.src = path; script.onload = resolve; script.onerror = () => reject(new Error(`Failed to load ${path}`)); document.head.appendChild(script); console.warn(&#39;[SDK] Using DOM fallback for script loading&#39;); } catch (e) { reject(e); } }); } function initGravityEngine() { if (typeof GravityEngine !== &#39;function&#39;) { console.error(&#39;[SDK] GravityEngine not found&#39;); return; } try { // 使用您的AppID 624768904 GravityEngine.init({ appId: &#39;624768904&#39;, enableLog: true }); console.log(&#39;[SDK] GravityEngine initialized with AppID 624768904&#39;); } catch (e) { console.error(&#39;[SDK] Init failed:&#39;, e); } } function handleSDKLoadFailure() { console.warn(&#39;[SDK] Using fallback analytics&#39;); window.GravityEngine = { init: () => console.warn(&#39;SDK unavailable&#39;), trackEvent: () => {} }; } // ====== 场景加载器 ====== async function loadStartScene() { try { // 加载主资源包 await new Promise((resolve) => { if (!cc.assetManager?.loadBundle) { console.warn(&#39;[Scene] AssetManager unavailable&#39;); return resolve(); } cc.assetManager.loadBundle(&#39;main&#39;, (err) => { if (err) console.error(&#39;[Scene] Bundle load error:&#39;, err); resolve(); }); }); // 加载场景 if (cc.director?.loadScene) { cc.director.loadScene(&#39;start&#39;); } else { throw new Error(&#39;Director unavailable&#39;); } } catch (error) { console.error(&#39;[Scene] Load failed:&#39;, error); try { cc.director.loadScene(&#39;start&#39;); } catch (e) { throw new Error(&#39;Fallback scene load failed&#39;); } } } // ====== UI_Entry组件 ====== const { ccclass, property } = cc._decorator; @ccclass export default class UI_Entry extends cc.Component { @property(cc.ProgressBar) progress_loading = null; loginTimeoutHandler = null; onLoad() { EngineReady.safeAccess(() => { try { cc.director.getCollisionManager().enabled = true; this._show(); } catch (e) { console.error(&#39;[UI] onLoad error:&#39;, e); this.startLoadGame(); } }).catch(e => { console.error(&#39;[UI] Engine access error:&#39;, e); this.startLoadGame(); }); } onDestroy() { this.loginTimeoutHandler && cc.Tween.stop(this.loginTimeoutHandler); } async _show() { this.progress_loading.progress = 0; // 平台SDK初始化 if (cc.sys.isBrowser) { try { await this.initYPSDK(); } catch (e) { console.error(&#39;[YPSDK] Init failed:&#39;, e); this.startLoadGame(); } } else { this.startLoadGame(); } // 登录超时保护 this.setLoginTimeout(); } setLoginTimeout() { if (cc.tween) { this.loginTimeoutHandler = cc.tween(this) .delay(10) .call(() => { console.warn(&#39;[Login] Timeout after 10s&#39;); this.startLoadGame(); }) .start(); } else { setTimeout(() => this.startLoadGame(), 10000); } } async initYPSDK() { if (typeof YPSDK === &#39;undefined&#39;) { console.warn(&#39;[YPSDK] SDK unavailable&#39;); return; } const config = { gameChannelList: { h5: { platformType: "h5", version: "1.0.0" }, tt: { platformType: "tt", appId: "tt09297f94961f881b02" }, wx: { platformType: "wx", appId: "wx6baaaa27ab5186ff" } } }; await YPSDK.init(39, "https://platform-shop-dev.hanyougame.com", config); await YPSDK.login(); if (YPSDK.setLoginCallBack) { YPSDK.setLoginCallBack(success => { if (!success) return; // 取消超时 this.loginTimeoutHandler && cc.Tween.stop(this.loginTimeoutHandler); // 初始化分析SDK if (r_GravityPlatform.default?.GA_Init) { r_GravityPlatform.default.GA_Init(YPSDK.Platform.loginData.bindingId); } this.startLoadGame(); }); } else { this.startLoadGame(); } } startLoadGame() { const tasks = [ this._loadGameConfig, this._loadRemoteConfig, this._loadExcelData, this._loadUserData, this._loadCommonBundle, this._loadMainBundle ].map(fn => fn.bind(this)); this.executeTasks(tasks, () => this._loadGame()); } executeTasks(tasks, finalCallback) { let completed = 0; const total = tasks.length; const runTask = async (index) => { if (index >= total) { finalCallback(); return; } try { await tasks[index](); completed++; this._setProgress(completed / total); runTask(index + 1); } catch (e) { console.error(`[Task ${index}] Failed:`, e); completed++; this._setProgress(completed / total); runTask(index + 1); // 继续执行后续任务 } }; runTask(0); } async _loadExcelData() { if (!r_ExcelLoader?.ExcelLoader?.loadAll) { console.warn(&#39;[Data] ExcelLoader unavailable&#39;); return; } await r_ExcelLoader.ExcelLoader.loadAll(); console.log(&#39;[Data] Excel loaded&#39;); } async _loadGameConfig() { if (!r_ResLoader.default?.loadRes) { console.warn(&#39;[Config] ResLoader unavailable&#39;); return; } const jsonAsset = await r_ResLoader.default.loadRes( "resources", "config/GameConfig", cc.JsonAsset ); if (jsonAsset && r_GameConfig.default) { r_GameConfig.default.appConfig = jsonAsset.json; jsonAsset.decRef && jsonAsset.decRef(); console.log(&#39;[Config] Game config loaded&#39;); } } async _loadRemoteConfig() { if (!r_GameConfig.default?.appConfig?.RemoteUrl) { console.warn(&#39;[Config] RemoteUrl not set&#39;); return; } const remoteUrl = r_GameConfig.default.appConfig.RemoteUrl; const remotePath = cc.path.join(remoteUrl, "ADConfig.json"); try { const remoteConfig = await r_ResLoader.default.loadRemote(remotePath, { ext: ".json" }); if (remoteConfig?.json && r_GravityPlatform.default) { r_GravityPlatform.default.videoId = remoteConfig.json.ADUnitId[0]; r_GameConfig.default.adConfig = remoteConfig.json; console.log(&#39;[Config] Remote config loaded&#39;); } } catch (e) { console.error(&#39;[Config] Remote load failed:&#39;, e); } } async _loadCommonBundle() { if (!r_ResLoader.default?.loadBundle) { console.warn(&#39;[Bundle] ResLoader unavailable&#39;); return; } try { await r_ResLoader.default.loadBundle(r_BundleConfig.BundleNames.Common); console.log(&#39;[Bundle] Common loaded&#39;); } catch (e) { console.error(&#39;[Bundle] Common load failed:&#39;, e); } } async _loadMainBundle() { if (!r_ResLoader.default?.loadBundle) { console.warn(&#39;[Bundle] ResLoader unavailable&#39;); return; } try { await r_ResLoader.default.loadBundle(r_BundleConfig.MainGameBundle); console.log(&#39;[Bundle] Main loaded&#39;); } catch (e) { console.error(&#39;[Bundle] Main load failed:&#39;, e); } } async _loadUserData() { try { // 音频初始化 r_AudioManager.AudioMgr?.init(); // 全局配置 r_GameGlobalVariable.GameGlobalVariable?.initPeiZhi(); // 网络检测 if (YPSDK?.Common?.curChannelData) { const platformType = YPSDK.Common.curChannelData.platformType; if (platformType === YPSDK.GamePlatformType.WX || platformType === YPSDK.GamePlatformType.TT) { r_YpNetMag.YpNetMag?.failSever(() => { r_YpNetMag.YpNetMag.isFail = true; }); } } // 用户数据初始化 if (YPSDK?.Platform?.loginData) { await r_YpNetMag.YpNetMag?.initServer(YPSDK.Platform.loginData); } } catch (e) { console.error(&#39;[User] Load failed:&#39;, e); } } _loadGame() { try { const guideIndex = r_PlayerDataManager.PlayerDataMgr.GetGuideIndexByTaskName( r_Const_Common.GuideName.战斗背包 ); if (guideIndex !== r_Const_Common.GameBagGuideIndex.引导完结) { // 新玩家流程 r_PlayerDataManager.PlayerDataMgr.GMSetGuideIndex?.( r_Const_Common.GuideName.战斗背包, r_Const_Common.GameBagGuideIndex.引导初始1 ); r_GameDataManager.GameDataMgr?.ClearGameBagData(); r_GameGlobalVariable.GameGlobalVariable.nowlevel = 1; r_UIManager.default?.open( r_BundleConfig.BundleNames.Game, r_UIConfig_Game.UIView_Game.UI_GameView ); } else { // 老玩家流程 r_EventManager.EventMgr?.dispatchEvent(r_EvenType.EVENT_TYPE.Game_Load_View, true); r_UIManager.default?.open( r_BundleConfig.BundleNames.Home, r_UIConfig_Home.UIView_Home.UI_Hall ); } // 白名单检查 this.checkWhiteList(); } catch (e) { console.error(&#39;[Game] Load failed:&#39;, e); try { cc.director.loadScene(&#39;start&#39;); } catch (sceneError) { console.error(&#39;[Game] Scene load failed:&#39;, sceneError); } } } async checkWhiteList() { try { if (!YPSDK?.Platform?.loginData || !YPSDK.platformUrl) return; const url = `${YPSDK.platformUrl}/User/GetCfgData?userId=${YPSDK.Platform.loginData.userUid}&keyId=NoVideo`; if (r_HttpManager.HttpMgr?.requestData) { r_HttpManager.HttpMgr.requestData(res => { if (res?.data?.keyData === "true") { r_PlayerDataManager.PlayerDataMgr.WHITE_NAME_NO_VIDEO = true; } }, url); } } catch (e) { console.error(&#39;[WhiteList] Check failed:&#39;, e); } } _setProgress(progress) { if (!this.progress_loading) return; this.progress_loading.progress = Math.max(0, Math.min(1, progress)); } } // ====== 启动游戏 ====== if (cc?.game?.run) { cc.game.run(gameMainEntry); } else { setTimeout(gameMainEntry, 1000); } 我的代码你已经给我修改过了 依旧出现这个错误
07-16
--------- beginning of system --------- beginning of main 2025-07-15 15:26:27.829 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082da 2025-07-15 15:26:27.829 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082e5 2025-07-15 15:26:27.835 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x00008c29 2025-07-15 15:26:27.835 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000087fe 2025-07-15 15:26:27.858 3124-3153 EGL_emulation org.cocos2d.demo E tid 3153: eglSurfaceAttrib(1493): error 0x3009 (EGL_BAD_MATCH) 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::onGetStringFromFile stream not found, possible missing file. 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::runScript script stream, buffer is empty! 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 15:26:29.718 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::evalString catch exception: 2025-07-15 15:26:29.737 3124-3151 jswrapper org.cocos2d.demo E ERROR: Uncaught ReferenceError: self is not defined, location: src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:0:0 STACK: [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.2 2025-07-15 15:26:29.738 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::evalString script src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js, failed! 2025-07-15 15:26:29.738 3124-3151 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 15:26:42.981 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 15:26:42.981 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 15:26:42.989 1452-1763 OMXNodeInstance media.codec E setConfig(0xf5210060:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001) 2025-07-15 15:26:42.990 1452-1763 OMXNodeInstance media.codec E getConfig(0xf5210060:google.mp3.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001) self问题解决了吗
07-16
2025-07-15 14:28:55.708 1573-1586 memtrack system_server E Couldn&#39;t load memtrack module 2025-07-15 14:28:56.419 1352-1352 SELinux servicemanager E avc: denied { find } for service=tab pid=2761 uid=10051 scontext=u:r:untrusted_app:s0:c51,c256,c512,c768 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=1 2025-07-15 14:28:57.008 2761-2790 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082da 2025-07-15 14:28:57.008 2761-2790 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082e5 2025-07-15 14:28:57.013 2761-2790 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x00008c29 2025-07-15 14:28:57.014 2761-2790 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000087fe 2025-07-15 14:28:57.037 2761-2790 EGL_emulation org.cocos2d.demo E tid 2790: eglSurfaceAttrib(1493): error 0x3009 (EGL_BAD_MATCH) 2025-07-15 14:28:58.749 2761-2788 jswrapper org.cocos2d.demo E ScriptEngine::onGetStringFromFile stream not found, possible missing file. 2025-07-15 14:28:58.749 2761-2788 jswrapper org.cocos2d.demo E ScriptEngine::runScript script stream, buffer is empty! 2025-07-15 14:28:58.749 2761-2788 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 14:28:58.785 2761-2788 jswrapper org.cocos2d.demo E ScriptEngine::evalString catch exception: 2025-07-15 14:28:58.805 2761-2788 jswrapper org.cocos2d.demo E ERROR: Uncaught ReferenceError: self is not defined, location: src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:0:0 STACK: [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.2 2025-07-15 14:28:58.807 2761-2788 jswrapper org.cocos2d.demo E ScriptEngine::evalString script src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js, failed! 2025-07-15 14:28:58.807 2761-2788 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 14:29:01.667 1450-1471 storaged storaged E getDiskStats failed with result NOT_SUPPORTED and size 0 2025-07-15 14:29:11.348 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 14:29:11.348 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 14:29:11.476 1452-1452 OMXNodeInstance media.codec E setConfig(0xf5210060:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001) 2025-07-15 14:29:11.476 1452-1452 OMXNodeInstance media.codec E getConfig(0xf5210060:google.mp3.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001) 解决问题
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值