版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37322178/article/details/83106491
PC端的混合开发-CefSharp
移动端的混合开发是火的不要不要的。最近看了一款软件。采用C#WinForm作为壳,内嵌谷歌浏览器的内核。一个标准的混合应用开发模式。
为什么要这样做?
其实和移动端的出发点差不多。就是为了web端实现主要业务。而壳主要用来调用本地硬件和原生的操作。比如:系统需要集成很多的硬件:小票二维码打印机,扫描枪等。这样通过js和c#的互操作,就达到了目的。
当然。要实现这样的功能。我们还有一种方式,就是开发浏览器插件,这样就能通过js来调用。
好了下面记录一下,具体的过程:环境是vs2013
1、创建WinForm项目。在NuGet里面搜索CefSharp.WinForms. 引入项目
过程可能相当的慢,没办法,墙外面的东西都这样。
另:下载后,会对.net框架有最低,根据提示,安装相应高版本的.net 框架即可
2、引入后,不能以Any CPU的方式启动。需要创建X86 或 X64,如下:
3、页面加入组件
public MainForm()
{
InitializeComponent();
//创建组件,传递URL:可以是本地,也可以是远程地址
ChromiumWebBrowser browser1 = new ChromiumWebBrowser(@"C:\00-leop\00-工作目录\2018\201801\TRCNZT\TRCNZT\bin\x86\Debug\T.html")
{
Dock = DockStyle.Fill
};
this.browser = browser1;
//将组件,添加到页面上来
this.MainPanel.Controls.Add(this.browser);
}
4、C#调用js
private void btnAlert_Click(object sender, EventArgs e)
{
this.browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('这是c#调用的js,给文本框赋值!')");
//txtAccount
this.browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('txtAccount').value='在C#里面给页面文本框进行赋值'");
}
5、js调用C#
首要要创建被调用的C#对象和方法,注意方法名要小写,大写的时候,会调用失败!
public class TestAsyncJS
{
/// <param name="text"></param>
public void messageBox(string text)
{
MessageBox.Show(text);
}
}
然后注册这个类
//注册C#对象,用来在js里面调用
this.browser.RegisterAsyncJsObject("CSharpObj", new TestAsyncJS(), BindingOptions.DefaultBinder);
这样,就能直接在js页面,调用C#方法
<script>
function ForSharp(){
alert("准备调用C#的弹窗提示!");
//注册的对象名称
CSharpObj.messageBox("hello word");
}
</script>
较全的代码:
public MainForm()
{
InitializeComponent();
//创建组件,传递URL:可以是本地,也可以是远程地址
ChromiumWebBrowser browser1 = new ChromiumWebBrowser(@"C:\00-leop\00-工作目录\2018\201801\TRCNZT\TRCNZT\bin\x86\Debug\T.html")
{
Dock = DockStyle.Fill
};
this.browser = browser1;
//将组件,添加到页面上来
this.MainPanel.Controls.Add(this.browser);
this.Text = this.AssemblyTitle;
//注册C#对象,用来在js里面调用
this.browser.RegisterAsyncJsObject("CSharpObj", new TestAsyncJS(), BindingOptions.DefaultBinder);
}