# 修复 build_eval_js 异步支持 + validatePageContext 诊断日志 ## 问题描述 1. `collect_lineloss.js` 的 `buildBrowserEntrypointResult` 是 async 函数,返回 Promise 2. 当前同步版 `build_eval_js` 中 `JSON.stringify(Promise)` = `"{}"` 3. 之前的 async IIFE 方案导致 `page_context_unavailable`(原因待排查) ## 方案 ### 修改1: build_eval_js 使用 .then() 分支 文件:`src/browser/callback_backend.rs` - `build_eval_js` 函数 逻辑: 1. 外层 IIFE 保持同步(兼容 C++ 注入层) 2. 将回调发送逻辑提取为 `_s` 函数 3. 如果返回值是 Promise(有 `.then` 方法),用 `.then(_s)` 异步等待结果 4. 否则直接同步调用 `_s(v)` ```javascript (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 状态。 ## 验证 1. `cargo test` 通过 2. 编译后拷贝 exe 到线上 3. 执行 skill,确认不再返回 `{}` 4. 如果出现 `page_context_unavailable`,查看浏览器控制台日志