我尝试在 C# 中使用 JavascriptMessageReceived 事件来处理浏览器中从 JS 调用的 CefSharp.PostMessage 。我什至下载了这个工作的示例link https://www.c-sharpcorner.com/article/communication-between-winforms-application-and-web-application-using-cefsharp-br/。运行示例本来应该完全满足我的需要,但它不起作用,我的代码也不起作用(如下)。 CefSharp 是否删除或更改了此功能?我是否需要在 CefSettings 或 ChromiumWebBrowser 中启用此功能?
using CefSharp;
using CefSharp.WinForms;
public ChromiumWebBrowser chromeBrowser;
public Form1()
{
InitializeComponent();
string curDir = Directory.GetCurrentDirectory();
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser(String.Format("file:///{0}/HelloWorld.html", curDir));
chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived;
}
private void ChromeBrowser_JavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e)
{
MessageBox.Show((string)e.Message);
}
HelloWorld.html 在这里
<!DOCTYPE html>
<html>
<body>
<script>
CefSharp.PostMessage("Hello world!");
</script>
</body>
</html>
-
CefSharp.PostMessage("Hello world!");
是 2020 年全新的 JS 扩展。确保您使用的是实际的 CefSharp。
-
chromeBrowser = new ChromiumWebBrowser(String.Format("file:///{0}/HelloWorld.html", curDir));
chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived;
订阅于JavascriptMessageReceived
事件已经太晚了,页面可能会被下载并且 JS 可能会在那一刻执行。您应该在页面加载之前订阅事件。chromeBrowser = new ChromiumWebBrowser("about:blank");
chromeBrowser.JavascriptMessageReceived += ChromeBrowser_JavascriptMessageReceived;
chromeBrowser.Load(String.Format("file:///{0}/HelloWorld.html", curDir));
- 确保 HelloWorld.html 存在于应用程序的当前工作目录中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)