关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
切换模式
返回顶部
首页
说说
开发
AI
游戏
资源
杂七杂八
首页
说说
开发
AI
游戏
资源
杂七杂八
关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
OPPO 快游戏在浏览器复现运行(四)之游戏入口加载
开发
·
游戏
·
2025-12-17
LiesAuer
一直以来,`web.sdk.js`都是通过以下方式加载快游戏的。 ```html ``` 在大部分的游戏中也是没有问题的,由于`web.sdk.js`中存在大量的异步加载逻辑,因此将`main.js`定义为模块,并在代码最前面补充加载等待是对游戏原代码侵入较小的一种方案,而且恰恰是模块,因此顶级 await 也就非常顺理成章了。 ```js await window.qg.ready(); ``` 直到遇到下面某款游戏的入口(代码片段) ```js await window.qg.ready(); window['qg'].setIsUnityGame(true); const xgame = qg; require("ral.js"); ``` 初步一看,看似没啥毛病对吧,非常简单的一个代码片段,但问题就出在了那行平平无奇的`const xgame = qg;`,由于`main.js`是模块,自带作用域隔离,因此此时的作用域是模块内部作用域,并非全局作用域,然后加载`ral.js`时就出问题了,`ral.js`是访问不到`xgame`的,会直接报错导致游戏加载中断。 为了解决这个问题,那么就不能将游戏入口定义为模块,不定义为模块,就没法在顶级 await,而且还得同时兼顾执行上下文的问题,在众多动态执行JS代码的方案中,那么很明显就只有动态创建script标签加载是最合适的了。 那么没办法,就只能在`web.sdk.js`中初始化自身后动态加载`main.js`了,由于快游戏的入口是固定的,因此直接硬编码加载也是没得问题的,这里处理后,`main.js`也就不需要`await window.qg.ready();`了,游戏入口代码零侵入。 ``` window.qg._ready = true; await requireAsync("main.js"); ```
快游戏
快应用
OPPO 快游戏在浏览器复现运行
如遇到文件无法下载,可右键复制链接打开标签页粘贴下载!
如果您觉得文章或项目对您有帮助,戳我请博主喝一杯咖啡叭!
正在加载验证组件...
取消回复
提交评论
瞅一瞅叭
收一个 Reqable 永久版订阅
最新评论
sineava: 大哥666,我就一直很好奇这Hoppscotch代理中间件咋写的...
laidou: 大佬求解释这个使用什么抓包的啊
Dog: hello,Can you please confirm if ...
追梦人: 大佬请问开纸飞机会员速度能提升吗?能的话我开一个,资源太多了,速...
追梦人: 要不内置个 sqlite-web?
cookee77: 好了 去github下载了 谢谢
cookee77: 请问为什么下载不了
关于站长
广东 佛山
liesauer#liesauer.net
LiesAuer
CC BY-NC-SA 4.0
粤ICP备16094588号-1
萌ICP备20245567号
茶
茶ICP备2025080027号
Theme
Jasmine
by
Kent Liao