CefSharp EvaluateScriptAsync执行js 返回对象、页面元素Node、对象数组
正常情况下,返回单值是没有问题的,但是返回对象,Node这种对象,要想让C#正常接收 js 就得特殊处理一下了:
这里webview就是ChromiumWebBrowser浏览器对象
返回对象
webview.EvaluateScriptAsync("new Object({'name':'zhangsan','age':10})").ContinueWith(new Action<Task<JavascriptResponse>>((respA) => { JavascriptResponse resp = respA.Result;
//respObj此时有两个属性: name、age dynamic respObj = resp.Result; Console.WriteLine(respObj.name + " " + respObj.age); }));
JS返回的对象直接使用 {'name':'zhangsan','age':10} 是不行的,需要用Object对象包起来由于见识太短,不知道什么原因,非常欢迎各位前辈指教,非常感谢!
数组对象
返回数组对象也一样,数组中不能直接使用{xx:xx}形式, 还是需要通过Object返回
webview.EvaluateScriptAsync("[new Object({'name':'zhangsan','age':10})]").ContinueWith(new Action<Task<JavascriptResponse>>((respA) => { JavascriptResponse resp = respA.Result; List<dynamic> respObj = (List<dynamic>)resp.Result; Console.WriteLine(respObj[0].name ); }));
页面对象
页面元素对象有点特殊,直接使用new Object(对象) 是不行的,用到Node元素中哪个属性,需要手动添加:
<a href="http://www.baidu.com" id = "a">A</a> <a href="http://i.cnblogs.com">B</a>
单个Node对象时,暂时没找到好的转换成Object办法,如果各位前辈有更好的处理办法,请留言!
比如此处用到了A标签的href属性:
//获取A标签的href属性
webview.EvaluateScriptAsync("new Object({href: document.getElementById('a').href})").ContinueWith(new Action<Task<JavascriptResponse>>((respA) => { JavascriptResponse resp = respA.Result; Console.WriteLine(resp.Result.href); }));
多个Node对象时,通过js的Array.from把一个个Node对象拼成了Object对象:
//获取多个A标签href属性
webview.EvaluateScriptAsync("Array.from(document.querySelectorAll('a'), item => new Object({ href: item.href }) );").ContinueWith(new Action<Task<JavascriptResponse>>((respA) => { JavascriptResponse resp = respA.Result; List<dynamic> respObj = (List<dynamic>)resp.Result; Console.WriteLine(respObj[0].href); }));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!