You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CefSharp ExecuteScriptAsync执行body.onload不生效解决方法

问题根因

当前注入的脚本将DOM插入逻辑绑定到了document.body.onmouseup事件上,仅当鼠标在页面内松开时才会触发执行,因此必须点击窗口才会显示文本。同时原注入脚本存在3处语法/变量错误,即便修改触发时机也无法正常运行:

  • 调用了不存在的API document.getElementsById,正确的单元素查询API为document.getElementById
  • 变量名不匹配:获取到的container元素存入了main变量,后续插入元素时错误使用了未定义的container变量
  • 变量名不匹配:创建的新div存入了newDiv变量,后续插入时错误使用了未定义的infoDiv变量
修改方案

Browser_FrameLoadEnd本身就是CefSharp提供的、帧加载完成后触发的回调事件,触发时机和页面原生onload完全一致,不需要额外绑定页面onload事件,直接在回调内执行DOM操作逻辑即可,修正后的代码如下:

private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
    if (e.Frame.IsMain)
    {
        browser.ExecuteScriptAsync(@"
            // 直接执行DOM插入逻辑,无需绑定鼠标事件
            var container = document.getElementById('container');
            // 增加判空逻辑,避免页面不存在对应元素时抛出JS错误
            if (container) {
                var newDiv = document.createElement('div');
                newDiv.innerHTML = 'NEW TEXT MESSAGE';
                container.appendChild(newDiv); 
            }
        ");
    }
}
补充说明

如果目标页面的container元素是后续JS动态渲染生成的、主帧加载完成时还未挂载到DOM上,可以在注入脚本里加个短间隔轮询,等元素出现后再插入内容,避免插入失败。

内容的提问来源于stack exchange,提问作者Sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:09:26