原文:WPF中使用cefsharp

新入职一家公司,由写服务端接口变成了软硬件通信、服务器、客户端、C/S、B/S乱七八糟各种打杂。首先接收一个WPF项目,因为不熟WPF,再加上前端我也不熟,我打算使用类似Webapp的方式改造一下,驱使我这样改造的原因是----我心里其实是期待着老板能看在我很忙很累的份上开开恩,招个前端妹子来。

WPF自己的webbrowser控件使用起来经常会js出错,看网上说可以修改注册表提高wpf默认使用的ie浏览器版本,最后决定使用cefsharp。

包管理器下载安装了cefsharp.wpf,没注意版本。

编译报错,提示需要.net 4.5.2以上版本,当前程序使用的是.net 4.0,编译器为vs2013。

工程右键->属性->目标框架,下拉最高只有.net 4.5.1,下载.net 4.5.2 Developer Pack安装。

准备工作结束,直接上代码

准备html

<html>
<head>
<meta charset="utf-8">
<link href="css/bootstrap.min.css?v=3.4.0" rel="stylesheet"> <script language="JavaScript" type="text/javascript">
function Selec()
{
bound.MyMethod();
}
</script>
</head>
<body oncontextmenu='return false' onselectstart='return false'> <input type="text" class="form-control"> <span class="help-block m-b-none">部门列表</span>
<input type="submit" value="保存" onclick="Selec()">
</body>
</html>

xaml布局文件不需要改动,相应cs文件

在构造函数中加入

//var browser = new CefSharp.Wpf.ChromiumWebBrowser();
this.Content = browser;
browser.Address = @"c:/html/Department.html";//文件路径
browser.RegisterJsObject("bound", new BoundObject(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false });//次函数有对应异步方法(RegisterAsyncJsObject),区别和使用场景没仔细看

在定义一个类供js调用的c#方法

public class BoundObject
        {
            public void MyMethod()
            {
                MessageBox.Show("success");
            }
}


new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }参数区分大小写。

好了,启动点击保存,弹出了了对话框。

还可以在xaml中使用

             xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
d:DesignHeight="900" d:DesignWidth="1240">
<Grid>
<cefSharp:ChromiumWebBrowser Name="mychrome" Height="900" Width="1240"/> </Grid>

对应cs文件中作相应更改

            var browser = new CefSharp.Wpf.ChromiumWebBrowser();
mychrome = browser;
browser.Address = CGlobal.InstallPath + "html/Department.html";
browser.RegisterAsyncJsObject("bound", new BoundObject(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); //Standard object rego

完善:

禁用右键 方法1

cs文件中加入

 browser.MenuHandler = new MenuHandler();

MenuHandler继承自接口IContextMenuHandler

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

方法2:修改HTML文件

<body  oncontextmenu='return false'>

禁止鼠标选中:

<body oncontextmenu='return false' onselectstart='return false'>

详情参考:https://github.com/cefsharp/CefSharp/wiki

WPF中使用cefsharp的更多相关文章

  1. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  2. 在WPF中使用CefSharp嵌入浏览器

    日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...

  3. .net core Wpf中使用cefsharp加载本地html网页,并且cefsharp支持any cpu

    第一步,在程序包管理器安装 cefsharp.wpf 第二步 您必须在项目的第一个 < propertygroup > 中添加 < cefsharpanycpusupport > ...

  4. wpf中使用cefsharp加载本地html网页并实现cs和js的交互,并且cefsharp支持any cpu

    废话少说,直接上代码: 第一步: 第二步: 第三步: 第四步: App.xaml.cs对应的代码: using CefSharp; using CefSharp.Wpf; using System; ...

  5. 【WPF】使用CefSharp嵌入HTML网页

    需求:WPF项目中要做用户的商铺主页,由于考虑到每个商家的主页布局各不相同,不能用XAML写死布局.最好的办法是WPF这边XAML写好一个容器,用户使用HTML可视化编辑器(比如这个)来准备好网页,输 ...

  6. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  7. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  8. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  9. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

随机推荐

  1. 关于用strace工具定位vrrpd进程有时会挂死的bug

    只做工作总结备忘之用. 正在烧镜像,稍总结一下进来改bug遇到的问题. 一个项目里要用到L3 switch的nat,vrrp功能,但实地测试中偶然出现write file挂死的情况,但不是必现.交付在 ...

  2. h5 video 点击自动全屏

    加上如下属性 https://blog.csdn.net/weixin_40974504/article/details/79639478 可阻止自动全屏播放,感谢 https://blog.csdn ...

  3. jboss-as-7.1.1.Final与jdk1.8不兼容解决方案

    今天在安装1.8电脑上装了jboss7.1.1,配置好了运行的时候就是无法启动,最后得出答案是:jboss-as-7.1.1.Final与jdk1.8不兼容 1.如果你的电脑安装了jdk1.8,那么在 ...

  4. html css div img垂直居中

    <head> <meta charset="UTF-8"> <meta name="Generator" content=&quo ...

  5. [RxJS] Split an RxJS Observable into groups with groupBy

    groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...

  6. C++网络编程方面的开源项目

    Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力. ...

  7. VNC不同用户 Oracle

    VNC登录用户缺省是root,但在安装oracle时必须用oracle用户的身份登录,下面我们就以oracle为例说明如何配置VNC,从而可以使用不同的用户登录到主机.步骤描述如下:    步骤一:修 ...

  8. HDU2473 Junk-Mail Filter - 并查集删除操作(虚父节点)

    传送门 题意: 每次合并两份邮件,或者将某一份邮件独立出来,问最后有多少个邮件集合. 分析: 考虑初始化每个节点的祖先为一个虚父节点(i + n),虚父节点指向它自己.这样可以进行正常的合并操作. 而 ...

  9. cocos2d-x之道~制作第一款文字游戏(二)

    在 cocos2d-x之道~制作第一款文字游戏(一)中,使用cocos2d-x把主界面显示出来.分别有每一个级别提供的初始短语TileView,和目标短语TargetView.初步接触了cocos2d ...

  10. NYOJ 36 最长公共子序列 (还是dp)

    这个好多算法书上都有,不仅限于<算法导论> 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 咱们就不拐弯抹角了,如题.须要你做的就是写一个程序,得出最长公 ...