通知设置 新通知
[LayaAirIDE2] Laya IDE 2.3.12版本,某些手机上(红魔9,iQOO 13)文本显示不全
回复BUG反馈 • 温其如玉 发起了问题 • 1 人关注 • 0 个回复 • 77 次浏览 • 2025-10-24 17:01
[LayaAir2] 2D动画编辑没法调整图层和父级子集嘛
回复LayaAir引擎2D • 我会变成巨人 发起了问题 • 1 人关注 • 0 个回复 • 76 次浏览 • 2025-10-24 14:49
[LayaAir3] 预制件导入到场景后,Position会发生变化
回复LayaAir引擎3D • 种花家 发起了问题 • 1 人关注 • 0 个回复 • 144 次浏览 • 2025-10-24 09:59
[LayaAir3] 命令行工具怎么打包安卓,在文档里面没看到
回复LayaAir Native打包 • 137*****560 发起了问题 • 1 人关注 • 0 个回复 • 336 次浏览 • 2025-10-23 14:50
[LayaAir3] Laya编辑器的的尺寸如何和html上的像素对齐?
回复LayaAir引擎2D • fftidus 发起了问题 • 1 人关注 • 0 个回复 • 396 次浏览 • 2025-10-23 09:49
[LayaAir3] VideoNode代码动态设置视频路径,Weg平台在手机上会自动播放,
回复LayaAir引擎3D • 种花家 发起了问题 • 1 人关注 • 0 个回复 • 578 次浏览 • 2025-10-22 15:38
[LayaAir3] Laya3.3.2编辑器中,使用按钮控制器修改按下状态按钮文字颜色不生效
回复LayaAir IDE • ebaww 发起了问题 • 1 人关注 • 0 个回复 • 651 次浏览 • 2025-10-22 09:32
[LayaAirIDE3] 希望支持Mesh2D render合批
回复LayaAir IDE • Archangelᴱᴿᴵᑦ 发起了问题 • 1 人关注 • 0 个回复 • 1314 次浏览 • 2025-10-17 10:13
[LayaAir3] 怎样看到TS脚本编译过程
回复LayaAir引擎3D • 155*****924 发起了问题 • 1 人关注 • 0 个回复 • 764 次浏览 • 2025-10-14 19:54
[LayaNative3] 安卓模拟器下帧率不稳定
回复LayaAir Native打包 • UCoyote 发起了问题 • 1 人关注 • 0 个回复 • 756 次浏览 • 2025-10-13 20:29
[LayaAir3] laya3.3使用3D trail,view模式下运行不显示
回复LayaAir引擎3D • ebaww 发起了问题 • 1 人关注 • 0 个回复 • 966 次浏览 • 2025-10-11 10:28
[LayaNative3] 3.3.2 ios web端音频问题
回复LayaAir IDE • 得意须尽欢 发起了问题 • 1 人关注 • 0 个回复 • 1118 次浏览 • 2025-10-10 17:40
layanative打包的android项目顺序加载js文件,可能有些js加载后未执行的问题
LayaAir Native打包 • 哎呀嘛N号 发表了文章 • 0 个评论 • 2575 次浏览 • 2025-09-30 09:43
原因:
android项目中apploader.js文件,对js加载有个顺序处理方案,具体代码在Document.uploadScript中
uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
if (this._loading == this._evalNum) {
this._loading = this._evalNum = 0;
this.scriptTextList.length = 0;
}
}
上面这段代码中,会有一个问题,如果window.downloadfile触发了下载失败的话,就会导致下载失败的那个文件始终在列表 scriptTextList中是空的,比如:下载0、 1、2、3、4、5这几个js文件,如果1下载失败,那么即使2、3、4、5全部加载完毕,回调_downloadOk方法时,_evalNum始终都是从1开始,在for循环中,scriptTextList[1] 始终都是null,这就导致2、3、4、5这几个js文件即使加载完成了,也无法执行 window.evalJS(js文件内容)。
处理方式:
在确保有这些js文件的前提下,把下载方法单独提出来,加载失败后,每隔500毫秒继续加载,直至加载完成
uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
this._downLoadFile(d, _t);
}
_downLoadFile(d, _t) {
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src + ", id:" + d.i);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
setTimeout(_t._downLoadFile, 500, d, _t);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
按照上面这种改法,能确保所有js都正常加载,亲测有效 查看全部
原因:
android项目中apploader.js文件,对js加载有个顺序处理方案,具体代码在Document.uploadScript中
uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
if (this._loading == this._evalNum) {
this._loading = this._evalNum = 0;
this.scriptTextList.length = 0;
}
}
上面这段代码中,会有一个问题,如果window.downloadfile触发了下载失败的话,就会导致下载失败的那个文件始终在列表 scriptTextList中是空的,比如:下载0、 1、2、3、4、5这几个js文件,如果1下载失败,那么即使2、3、4、5全部加载完毕,回调_downloadOk方法时,_evalNum始终都是从1开始,在for循环中,scriptTextList[1] 始终都是null,这就导致2、3、4、5这几个js文件即使加载完成了,也无法执行 window.evalJS(js文件内容)。
处理方式:
在确保有这些js文件的前提下,把下载方法单独提出来,加载失败后,每隔500毫秒继续加载,直至加载完成
uploadScript(d) {
var _t = this;
d.i = this._loading;
this._loading++;
this._downLoadFile(d, _t);
}
_downLoadFile(d, _t) {
if (d.src) {
console.log("_downloadAysn:temp.src" + d.src + ", id:" + d.i);
window.downloadfile(d.src, false, function (data) {
d._stext = data + "\n//@ sourceURL=" + d.src;
_t._downloadOk(d);
}, function () {
var e = new Event("error");
e.target = e.currentTarget = d.obj;
d.obj.onerror && d.obj.onerror(e);
setTimeout(_t._downLoadFile, 500, d, _t);
});
}
else {
d._stext = d.text;
_t._downloadOk(d);
}
}
_downloadOk(d) {
this.scriptTextList[d.i] = d;
for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) {
var t = this.scriptTextList[i];
if (!t)
return;
console.log(">>>>>>>>>>>>>>>eval src=" + t.src);
var t1 = Date.now();
window.document["currentScript"] = t.src;
window.evalJS(t._stext);
console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1));
var e = new Event("load");
e.target = e.currentTarget = t.obj;
t.obj.onload && t.obj.onload(e);
this._evalNum++;
}
按照上面这种改法,能确保所有js都正常加载,亲测有效
[LayaAirIDE3] laya3 透明默认无法合批 强制开启后 越来越卡
回复LayaAir引擎3D • 小强 发起了问题 • 2 人关注 • 0 个回复 • 1119 次浏览 • 2025-09-25 12:10
[LayaNative3] 3.2.8发布android项目不断切换清理资源后native内存一直涨
回复LayaAir Native打包 • 哎呀嘛N号 发起了问题 • 1 人关注 • 0 个回复 • 1365 次浏览 • 2025-09-24 15:47
[LayaAir3] 武汉项目外包,低版本的Laya H5项目重构、功能升级吗,个人优先
回复求职与招聘 • 1654091325用户 发起了问题 • 1 人关注 • 0 个回复 • 333 次浏览 • 2025-09-22 15:40
[LayaAir3] 3.3 材质球赋予不存在shader导致渲染异常
回复BUG反馈 • Recovery 发起了问题 • 1 人关注 • 0 个回复 • 1343 次浏览 • 2025-09-17 14:58
[LayaAir3] Laya3.3在oppo小游戏上有大量报错Cannot read property '_globalRepaintSet' of undefined
回复OPPO小游戏专区 • 1617866298用户 发起了问题 • 1 人关注 • 0 个回复 • 352 次浏览 • 2025-09-15 14:07
