1.5 KiB
1.5 KiB
修复 build_eval_js 异步支持 + validatePageContext 诊断日志
问题描述
collect_lineloss.js的buildBrowserEntrypointResult是 async 函数,返回 Promise- 当前同步版
build_eval_js中JSON.stringify(Promise)="{}" - 之前的 async IIFE 方案导致
page_context_unavailable(原因待排查)
方案
修改1: build_eval_js 使用 .then() 分支
文件:src/browser/callback_backend.rs - build_eval_js 函数
逻辑:
- 外层 IIFE 保持同步(兼容 C++ 注入层)
- 将回调发送逻辑提取为
_s函数 - 如果返回值是 Promise(有
.then方法),用.then(_s)异步等待结果 - 否则直接同步调用
_s(v)
(function(){try{
var v=(function(){return {script}})();
function _s(v){
var t=(typeof v==='string')?v:JSON.stringify(v);
try{callBackJsToCpp(...);}catch(_){}
var j=JSON.stringify({...});
try{XHR...}catch(_){}
try{sendBeacon...}catch(_){}
}
if(v&&typeof v.then==='function'){v.then(_s).catch(function(){});}
else{_s(v);}
}catch(e){}})()
修改2: validatePageContext 添加诊断日志
文件:D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\tq-lineloss-report\scripts\collect_lineloss.js
在 validatePageContext 每个检查点添加 console.log,记录 host、expected_domain、mac 状态。
验证
cargo test通过- 编译后拷贝 exe 到线上
- 执行 skill,确认不再返回
{} - 如果出现
page_context_unavailable,查看浏览器控制台日志