抱歉上次给的方案有误。conch.onerror 是 native 运行时 C++ 侧暴露的只读属性,不能直接赋值。
3.2 的 apploader.js 里本来有一套完整的桥接机制:
conch.onerror 被设为一个桥接函数(由 apploader 内部赋值),它会转发到 window.onerror
window.onerror 通过 Object.defineProperty 重定向到 conch.__onerror
所以正常情况下你直接用 window.onerror = fn 就行,apploader 会把 fn 存到 conch.__onerror,native 报错时通过桥接函数调用过去。
你现在的情况是 conch.onerror 赋值报只读错误,说明 apploader.js 内部那一行 conch.onerror = bridgeFunction 也会失败,整个桥接链就断了。这大概率是你的 native 运行时二进制和 apploader.js 版本不匹配——新版 native 把 onerror 改成只读了,但 apploader.js 还是老版的写法。
你可以试试直接设 conch.__onerror,绕过桥接函数:
if ((window as any).conch) {
(window as any).conch.__onerror = function(message, filename, lineno, colno, error) {
console.log("native error:", message, filename, lineno, colno, error);
// 上传日志逻辑
};
}
如果 __onerror 也报只读,那就是 native 运行时版本的问题了,麻烦提供一下你 IDE 的具体版本号(帮助→关于里看),我确认下。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。