【发布时间】:2017-11-04 02:27:23
【问题描述】:
每当我尝试使用 CefSharp (Stable 57.0) 通过 C# 执行 JavaScript 时,都会出现错误。我只是尝试执行警报功能,所以我可以确保它有效,然后用我自己的功能对其进行测试。但是,我似乎在尝试这样做时遇到了错误。
public partial class WebBrowserWindow : Window
{
public WebBrowserWindow()
{
InitializeComponent();
webBrowser.MenuHandler = new ContextMenuHandler();
webBrowser.RequestHandler = new RequestHandler();
}
//Trying to execute this with either method gives me an error.
public void ExecuteJavaScript()
{
//webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");
//webBrowser.ExecuteScriptAsync("alert('test');");
}
}
我尝试了两种执行脚本的方式。
第一个:
webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");
给我这个错误:
第二个:
webBrowser.ExecuteScriptAsync("alert('test');");
给我这个错误:
我的目标是创建一个可以在我的 CefSharp 浏览器中执行 JavaScript 函数的 C# 函数。
我尝试了很多链接/引用,但堆栈溢出时并没有那么多。我还阅读了The FAQ for CefSharp 并找不到任何简单的示例可以让我通过 C# 随意执行 JavaScript。
此外,我已经验证了 Frame 加载(完成加载)和卸载(未卸载)的事件,以及 webbrowser 是否为 null(它不是),以及来自以下位置的消息:
webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");
仍然会导致第一个错误发生。
我测试了 GetMainFrame()。它总是返回 null。总是。不管我等待多长时间,或者我检查什么条件。
重要
我忘记添加一条重要信息,我的项目中有 2 个程序集。它们都编译成单独的可执行文件:
Helper.exe 主程序
main.exe 有一个窗口“CallUI”,当单击按钮时,它会执行我创建的方法“ExecuteJavaScript()”,该方法位于我的窗口“BrowserWindow”内。 CallUI 窗口在 Helper.exe 中声明和初始化。
所以基本上我正在尝试使用单独的程序打开一个窗口,单击一个调用该方法的按钮并执行 javascript。所以我认为因为它们是不同的进程,它告诉我浏览器是空的。但是,当我在 Main.exe 中完成所有操作时,它工作正常。是否有一种解决方法允许我使用单独的进程从 Helper.exe 创建窗口并从 Main.exe 执行 Javascript?
【问题讨论】:
-
您能否创建有关此 Main.exe 和 Helper.exe 交互的最小可重现示例(源代码)?没有它,就很难为您提供解决方案并确保它有效。
-
嘿,我的问题得到了解决,结果我必须实现一种方法让进程相互通信(请参阅下面的长答案)。我还有一个关于我的解决方案的额外问题(在我的答案的评论部分)。
标签: javascript c# wpf cefsharp