WPF内嵌CEF控件,与JS交互
1)安装cefsharp.winform包
打开VS2017,打开nuget,找到cefsharp.winform,安装
问:为什么wpf程序不使用cefsharp.wpf?
答:因为cefwpf 49版本的bug很多,而winform_cef就比较靠谱,比如在不同的输入法切换后无法输入中文
问:那为什么不使用更高版本的cefwpf?
答:因为要支持XP,而49版本是cef_wpf能支持XP的最高版本
哦,业界毒瘤 ——XP和IE6
2):平台改成x64或者x86
因为Cefsharp没有针对AnyCpu的模式
3)代码如下:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//***这段代码很关键,而且只需执行一次即可,最好写在静态构造函数中*** //
var settings = new CefSharp.CefSettings();
settings.CefCommandLineArgs.Add("disable-gpu", "1");
settings.CefCommandLineArgs.Add("force-device-scale-factor", "2");
Cef.Initialize(settings);
//********************************************************* //
var webbrowser = new ChromiumWebBrowser("https://www.baidu.com");
//为什么要用一个windowsformhost包起来,因为cef是winform的,所以在wpf下使用,必须用这个包一下
var winform = new WindowsFormsHost()
{
Child = webbrowser
};
//绑定,和js交互的关键,注册一个JsObj,这个可以自定义,然后对于js来说,第二个参数this就代表了JsObj
webbrowser.RegisterAsyncJsObject("JsObj", this, false);
this.Content = winform;
}
public void (object pramas)
{
//可以通过这种方式取得参数
var type = pramas.GetType();
var id=type.InvokeMember("id", System.Reflection.BindingFlags.GetProperty, null, pramas, null);
//do something.....
Application.Current.MainWindow.Dispatcher.BeginInvoke(new Action(() =>//报错
{
//do something.....
}));
Dispatcher.BeginInvoke(new Action(() => //不会报错
{
//do something.....
}));
}
}
上方代码中,display是被调方法,在执行display时,是子线程在执行,聪明的你一定想到了
那就Application.Current.MainWindow.Dispather.BeginInvoke,但是依然会报错,为什么?
因为在get mainwindow时依旧是操作了主线程的UI元素,所以改成下面那种方式即可
js代码:
<script type="text/javascript">
function abc()
{
JsObj.display(data);
}
</script>
WPF内嵌CEF控件,与JS交互的更多相关文章
- swt java 内嵌ActiveX控件
这里用的是SWT/JFace开发application中SWT自带的org.eclipse.swt.ole.win32 包可以支持内嵌OLE和ActiveX. 具体用法如下: //创建一个OleFra ...
- VB6 Webbowser控件与JS交互,无边框和屏蔽右键菜单
1. 屏蔽右键菜单 在菜单中单击"工程"->"引用",在列表中找到"Microsoft HTML Object Library"打上 ...
- WPF内嵌网页的两种方式
在wpf程序中,有时会内嵌网页.内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核. 一.第一种使用自带WebBrows ...
- 在WPF中使用WinForm控件方法
1. 首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2. 在要使用WinForm控 ...
- WPF中的ControlTemplate(控件模板)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板) ...
- [转]在WPF中使用WinForm控件方法
本文转自:http://blog.csdn.net/lianchangshuai/article/details/6415241 下面以在Wpf中添加ZedGraph(用于创建任意数据的二维线型.条型 ...
- NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- WPF 绑定StaticResource到控件的方法
原文:WPF 绑定StaticResource到控件的方法 资源文件内的属性能否直接通过绑定应用到控件?答案是肯定的. 比如,我们要直接把下面的<SolidColorBrush x:Key=&q ...
- WPF中的ControlTemplate(控件模板)
原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板) ...
随机推荐
- 0817NOIP模拟测试赛后总结
吐槽一句:话说NOIP都取消了还叫NOIP模拟真的好么 于是乎我再次爆炸……(0+20+50=70 rank26) 赛时状态 赛时的状态依旧不佳.不过还是硬逼着自己把三道题都读完,然后开始对出题人静坐 ...
- 19-10-29-Z
%%%ZZYY 只是因为是Z才模一下的. ZJ一下: 考试T1写了三张纸但是它死了. T2T3暴力叕写跪了. 考试一定一定不能不严密,少推两个交点是要命的啊. 就因为叕叕少开龙龙见祖宗了. 如果考试能 ...
- 洛谷P5104 红包发红包
题目链接: P5104 题目分析: 题目和\(n\)是没什么关系的,因为是\(n\)个人抢,其实不一定抢完 其实很显然--就是求一个连续型随机变量的期望 首先设一个随机变量\(X\),表示第一个人拿到 ...
- Python学习day14-函数进阶(2)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- linux 备份最近一天的文件
#!/bin/bash #备份在最近一天修改的文件 #date 获取日期 +%Y-%m-%d 设置日期格式为yyyy-mm-dd的形式 BACKFILE=backup-$(date +%Y-%m-%d ...
- js 引入Vue.js实现vue效果
拆分组件为单个js见:https://www.jianshu.com/p/2f0335818ceb 效果 html <!DOCTYPE html> <html> <hea ...
- 2018-12-17-VisualStudio-使用新项目格式快速打出-Nuget-包
title author date CreateTime categories VisualStudio 使用新项目格式快速打出 Nuget 包 lindexi 2018-12-17 14:11:50 ...
- C/C++ 信号量 CreateSemaphore 用法
HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // SD LONG lInitialCount, // in ...
- redies安装
第一步下载redies 下载地址:https://github.com/microsoftarchive/redis/releases 第二步修改文件夹名为redies 第三步运行redies 打开一 ...
- DataSourceUtils(使用C3P0连接池的工具类)
一.导入jar包(c3p0-0.9.1.2.jar) 2.添加配置文件(放在src下) 配置文件的名称:c3p0.properties 或者 c3p0-config.xml 放在src之下 c3p0. ...