48 lines
1.5 KiB
Markdown
48 lines
1.5 KiB
Markdown
# 修复 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`,查看浏览器控制台日志
|