使用CefSharp在.Net程序中嵌入Chrome浏览器(五)——Javascript交互

要在CEF中和网页的JS进行交互,首先我们要通过设置启用Javascrit集成功能。

CefSharpSettings.LegacyJavascriptBindingEnabled = true;

调用JavaScript:

简单的调用JavaScript可以直接使用ExecuteScriptAsync扩展函数。

_chrome.ExecuteScriptAsync("alert(‘hello world‘)");

实际上,JavaScript是具体到frame的,上述代码等价于

_chrome.GetMainFrame().ExecuteJavaScriptAsync("alert(‘hello world‘)");

调用JavaScript返回值:

我们也可以使用EvaluateScriptAsync扩展函数执行javascript并获取返回值。

var rsp = await _chrome.EvaluateScriptAsync("3+2*5");
if (rsp.Success)
{
    MessageBox.Show(rsp.Result.ToString());
}

也可以具体到frame:

_chrome.GetMainFrame().EvaluateScriptAsync("3+2*5")

JavaScript回调:

要Javascript回调,首先得注入一个对象。

public class AsyncBoundObject
{
    public int Div(int divident, int divisor)
    {
        return divident / divisor;
    }
}
_chrome = new ChromiumWebBrowser();
_chrome.RegisterAsyncJsObject("cef", new AsyncBoundObject());
_chrome.Address = "http://tianfang.cnblogs.com";

注意: 这个注入得再加载网页之前,否则可能网页无法加载注入的js。

注入的函数是异步返回的,因此返回的是一个Promise对象,我们调用的时候可以使用ES6的await方式。

await cef.div(4, 2)

关于js注入更多信息,可以参看这个网页。how-do-you-expose-a-net-class-to-javascript

原文地址:https://www.cnblogs.com/TianFang/p/9902795.html

时间: 2024-08-22 02:01:42

使用CefSharp在.Net程序中嵌入Chrome浏览器(五)——Javascript交互的相关文章

使用CefSharp在.Net程序中嵌入Chrome浏览器(八)——Cookie

原文:使用CefSharp在.Net程序中嵌入Chrome浏览器(八)--Cookie CEF中的Cookie是通过CookieManager来管理的,可以用它来设置发送的Cookie. 发送Cookie 发送Cookie的一个基本示例如下: var cookieManager = _chrome.GetCookieManager();cookieManager.SetCookie("http://localhost:5000/test", new Cookie(){    Name 

使用CefSharp在.Net程序中嵌入Chrome浏览器(九)——性能问题

原文:使用CefSharp在.Net程序中嵌入Chrome浏览器(九)--性能问题 在使用CEF的过程中,我发现了一个现象:WPF版的CEF比Chrome性能要差:一些有动画的地方会掉帧(例如,CSS动画,全屏图片拖动等),视频播放的效果也没有Chrome流畅. 查了一下相关资料,发现CEFSharp.WPF不是直接渲染在控件上的,它的大概流程如下: CEFSharp.WPF的ChromiumWebBrowser控件本质上是一个图片 而是通过离屏渲染的方式渲染在缓冲区里, 绘制完成后,然后将缓冲

使用CefSharp在.Net程序中嵌入Chrome浏览器(十)——独立文件夹部署

原文:使用CefSharp在.Net程序中嵌入Chrome浏览器(十)--独立文件夹部署 CefSharp本身携带了一大堆文件,这些文件默认直接释放在exe文件底下,这种方式本身没有什么问题,但多了一大堆文件后不是很好看.本文这里就介绍一个方法,使得可以将CEF相关的文件部署到独立的文件夹. 在开始改造之前,还是得另外新建一个工程安装一次CEFSharp,这样才能获取到相关资源文件.然后从这些资源文件中分离出来. 首先把CEF进程相关的文件拷贝到一个独立的文件夹: 然后我们的程序中只需要引用CE

使用CefSharp在.Net程序中嵌入Chrome浏览器(二)——参数设置

在实现了.Net程序中嵌入Chrome浏览器后,下一步的个性化操作就是加入一些设置了,在前面的文章中,我们可以看到在使用Chrome控件前,有如下一个操作: ????var setting = new CefSharp.CefSettings();????CefSharp.Cef.Initialize(setting, true, false); 这个setting变量就是用来存放chrome的全局设置的地方,当需要进行设置的时候,只需要对它进行修改即可.例如,我们要修改缓存目录,只需要如下设置

使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介

有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡顿,有的时候甚至能达到好几秒,严重影响体验. 这个时候,我们可以考虑使用第三方浏览器来代替系统的WebBrowser,常见的方案是使用版本帝Chrome,Chrome本身提供了供第三方程序嵌入的方案Chromium Embedded Framework (CEF),但这个是C++的接口,在.Net程

使用CefSharp在.Net程序中嵌入Chrome浏览器(四)——启动优化

在实际使用过程中,发现有的客户端会出现chrome加载网页过慢问题,定位后发现很多是因为设置系统代理所致,此时可以通过如下启动参数禁止系统代理. {"proxy-auto-detect", "0"},{"no-proxy-server", "1"}, 另外一个小技巧是: 由于cef本身是一个独立的进程,我们不需要等待主窗口加载完成后再创建ChromiumWebBrowser,单独启动它也不影响主程序启动速度, 因此可以将Chr

使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试

chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.ShowDevTools(); 这种方式下,类似chrome中按F12,直接打开了一个开发者工具窗口, 远程调试: 也可以使用chrome远程调试的方式来调试我们的cef程序,只需要设置远程调试端口即可. var?setting?=?new?CefSettings?{RemoteDebuggingPort

使用CefSharp在.Net程序中嵌入Chrome浏览器(三)——基本操作

CefSharp本身提供了WPF和WinForm两个版本的控件,这两个版本的控件使用方法大同小异,由于我WPF的版本用的较多,这里就简单的介绍下WPF版的CEFSharp控件的用法. 加载页面: ChromiumWebBrowser提供了Load函数,可以实现页面的加载, _chrome.Load("http://tianfang.cnblogs.com/"); 不过这个函数只能在CEF控件加载完成后进行,用起来有些不方便,往往用他来实现页面的刷新.实际使用中大多通过设置Address

使用CefSharp在.Net程序中嵌入Chrome浏览器(七)——右键菜单

一个常用的功能就是禁止浏览器本身的右键菜单,靠在WPF中拦截鼠标事件是不行的,可以通过设置MenuHandler来实现. 首先实现一个IContextMenuHandler. public class NullMenuHandler : IContextMenuHandler { public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams par