Cefsharp使用教程四( js回调,C#方法)
1 2 | browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync( "document.getElementById('testid').click();" ); browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync( "document.getElementById('testid2').value='123'" ); |
2.其他Frame操作
1 2 3 4 5 6 | string script = "if(document.getElementById('img_out_10000')){ document.getElementById('img_out_10000').click(); }" ; var list = browser.GetBrowser().GetFrameNames(); if (list.Count > 1) { browser.GetBrowser().GetFrame(list[1]).ExecuteJavaScriptAsync(script); } |
3.如何调用Javascript方法返回的结果呢?
如果您需要评估代码,返回一个值,使用Task EvaluateScriptAsync(string script, TimeSpan? timeout)方法。 JavaScript代码是异步执行的,因此使用.NET Task类返回一个响应,其中包含错误消息,结果和一个成功(布尔)标志。
1 2 3 4 5 6 7 8 9 10 11 | // Get Document Height var task = frame.EvaluateScriptAsync( "(function() { var body = document.body, html = document.documentElement; return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); })();" , null ); task.ContinueWith(t => { if (!t.IsFaulted) { var response = t.Result; EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null" ) : response.Message; } }, TaskScheduler.FromCurrentSynchronizationContext()); |
4.你如何暴露的.NET类为Javascript?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class BoundObject { public string MyProperty { get ; set ; } public void MyMethod() { // Do something really cool here. } } // ... //browser表示你的CefSharp对象使用它的RegisterJsObject来绑定你的.net类 browser.RegisterJsObject( "bound" , new BoundObject()); //在实际的JS代码中,你将使用这样的对象: bound.myProperty; // 使用此语法访问属性 bound.myMethod(); // 使用此调用方法。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <link href= "https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel= "stylesheet" > </div> <script> (function(){ function setArticleH(btnReadmore,posi){ var winH = $(window).height(); var articleBox = $( "div.article_content" ); var artH = articleBox.height(); if (artH > winH*posi){ articleBox.css({ 'height' :winH*posi+ 'px' , 'overflow' : 'hidden' }) btnReadmore.click(function(){ articleBox.removeAttr( "style" ); $( this ).parent().remove(); }) } else { btnReadmore.parent().remove(); } } var btnReadmore = $( "#btn-readmore" ); if (btnReadmore.length>0){ if (currentUserName){ setArticleH(btnReadmore,3); } else { setArticleH(btnReadmore,1.2); } } })() </script> </article> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!