You need to enable JavaScript to run this app. WebView2中ExecuteScriptAsync返回HTMLCollection异常问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

WebView2中ExecuteScriptAsync返回HTMLCollection异常问题咨询

返回结果与预期偏差的根本原因

核心机制说明

ExecuteScriptAsync的内置JSON序列化能力,仅支持处理JS原生的普通值、对象、数组类型,无法直接序列化浏览器原生DOM宿主对象

  • document.getElementsByTagName('button')返回的HTMLCollection是浏览器实现的宿主类数组对象,不属于JS原生Array实例
  • 序列化逻辑检测到该对象不是可识别的普通JS结构时,只会遍历其自身可枚举的数字索引属性,既不会按照数组格式输出,也无法读取索引对应HTMLButtonElement DOM对象的内部属性
  • 最终序列化结果就会退化为以数字为键、值为空对象的普通结构,也就是实际收到的{"0":{},"1":{}}

修正方案

需要在JS脚本执行阶段,先将DOM相关数据转换为完全可序列化的原生JS结构,再返回给C#端,示例代码如下:

var script = @"Array.from(document.getElementsByTagName('button')).map(btn => {
  return {
    text: btn.textContent.trim(),
    id: btn.id,
    disabled: btn.disabled
  }
});";
var jsonResult = await webView21.ExecuteScriptAsync(script);
  • 通过Array.from将HTMLCollection转换为JS原生数组
  • 遍历每个按钮DOM元素,提取业务需要的属性构造普通键值对对象,这类结构会被正常序列化,可得到符合预期的结构化数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 03:45:07