在上一篇博文《WinForm内置浏览器之CefSharp 笔记一》,简单介绍了CefSharp的快速入门。这篇博文接着上篇,主要记录C#如果调用JS中的方法。
本文主要参照Github示例:传送门
在这里插入图片描述

CefSharp学习笔记

加载自定义网页

  • 修改网址,使用ChromiumWebBrowser类的Load方法,直接直接输入网址,也可以加载本地的html文件。
 m_chromeBrowser.Load(“https://www.baidu.com”);
  • 加载自定义html,使用ChromiumWebBrowser类的LoadHtml方法。
m_chromeBrowser.LoadHtml("<html><body>Hello world</body></html>", "http://customrendering/");

JavaScript调用执行C#中的类

这块主要调用ChromiumWebBrowser类的RegisterJsObject方法,示例如下:(CefCustomObject(chromeBrowse是一个自定义类,可以在上一篇文章中找到)

chromeBrowser.RegisterJsObject("cefCustomObject", new CefCustomObject(chromeBrowser, this));

C#调用执行JavaScript脚本

这块主要调用ChromiumWebBrowser类的ExecuteScriptAsync方法,示例如下:

 private void buttonExecJavaScriptFromWinforms_Click(object sender, EventArgs e){m_chromeBrowser.LoadHtml("<html><body>Hello world</body></html>", "http://customrendering/");var script = "document.body.style.backgroundColor = 'red';";m_chromeBrowser.ExecuteScriptAsync(script);}

还可以这样执行调用:

browser.GetMainFrame().ExecuteJavaScriptAsync(script);

这块可能会遇到这个问题Browser is not yet initialized. Use the IsBrowserInitializedChanged event and check the IsBrowserInitialized property to determine when the browser has been intialized.
官方建议调用方式:参考链接,
这块我使用的ExecuteScriptAsyncWhenPageLoaded方法执行脚本来避免上面的问题。

C#调用JavaScript,并获取返回的结果

这块因为是异步执行的,所以要获取结果要参考下面这种方式

private void buttonReturnDataFromJavaScript_Click(object sender, EventArgs e)
{m_chromeBrowser.LoadHtml("<html><body>Hello world</body></html>", "http://customrendering/");StringBuilder sb = new StringBuilder();sb.AppendLine("function tempFunction() {");sb.AppendLine("     var w = window.innerWidth;");sb.AppendLine("     var h = window.innerHeight;");sb.AppendLine("");sb.AppendLine("     return w*h;");sb.AppendLine("}");sb.AppendLine("tempFunction();");var task = m_chromeBrowser.EvaluateScriptAsync(sb.ToString());task.ContinueWith(t =>{if (!t.IsFaulted){var response = t.Result;if ( response.Success == true ){MessageBox.Show( response.Result.ToString() );}}}, TaskScheduler.FromCurrentSynchronizationContext());}

屏蔽浏览器的右键菜单

新建MenuHandler类

    public class MenuHandler : CefSharp.IContextMenuHandler{void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model){model.Clear();}bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags){//throw new NotImplementedException();return false;}void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame){//throw new NotImplementedException();}bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback){return false;}}

设置ChromiumWebBrowser对象的MenuHandler属性,即可屏蔽右键菜单

m_chromeBrowser = new ChromiumWebBrowser(page);
//屏蔽右键菜单
m_chromeBrowser.MenuHandler = new MenuHandler();

推荐资源:

  1. CefSharp初识–把网页移到桌面(我觉得还不错,感兴趣的可以看一下)
  2. Frequently asked questions(常见问题)

WinForm CefSharp 笔记二相关推荐

  1. python winform开发_c#教程之.Net WInform开发笔记(三)谈谈自制控件(自定

    末日这天写篇博客吧,既然没来,那就纪念一下. 这次谈谈自制控件,也就是自定义控件,先上图,再说 1.扩展OpenFileDialog,在OpenFileDialog中添加各种文件(.txt,.jpg, ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  4. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  5. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

  9. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

最新文章

  1. 彩图完美解释:麦克斯韦方程组
  2. 西南科技大学智能车竞赛 线上比赛
  3. datePicker在fullscreen下不弹出
  4. seo外链优化需要规避的那些坑
  5. bzoj 4012: [HNOI2015]开店 主席树
  6. 如何验证某个 string 是否为合法的 GUID ?
  7. XML——XSLT的一个简单荔枝
  8. pythonset是什么类型的游戏_Python集合(set)类型的操作
  9. Python界面 PyQT可视化开发(python3+PyQt5+Qt Designer)
  10. java复选框互斥_jmu-Java-07多线程-互斥访问 (5分)
  11. springboot2源码1-SpringApplication实例化
  12. 利用VB.Net 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC间的双向通信
  13. 【Tools】OBS Studio录制视频教程
  14. 网吧服务器系统是怎么弄的,网吧无盘服务器系统安装流程备忘录-2020
  15. 概率论————思维导图(上岸必备)(随机事件与概率)
  16. 命令改计算机用户名和密码,利用NET命令添加、修改用户账户信息
  17. win7右键菜单管理_电脑鼠标右键管理工具下载 Windows鼠标右键增强管理软件 v1.0 绿色单文件免费版 下载...
  18. 从少年变成老男孩-----韩寒与郭敬明的十年
  19. 我爱淘冲刺阶段站立会议2每天任务2
  20. JPEG文件二进制格式分析

热门文章

  1. java代码混淆(使用 ProGuard 工具)
  2. 前端之JS篇(四)——三种循环(forwhiledo...while)
  3. 如何使用dSYM符号化crash日志。解析线上crash
  4. APPDynamics APM性能监控软件
  5. web中转服务器,Web服务器
  6. python统计大小写字母个数
  7. 计算机主板思维导图,根据思维导图,参考解读,你也能顺利完成CPU的选配
  8. 转载:mavlink 磁力计校准部分分析
  9. 简约手绘大数据动态PPT模板
  10. 洛谷P1046 陶陶摘苹果c语言