Jua*_*uan 4 c# chromium-embedded cefsharp
重现这一点的步骤非常简单。只需使用 nuget 下载最新版本的 CefSharp.WinForms (57.0.0),然后将一个按钮和此代码添加到表单中:
public partial class Form1 : Form
{
ChromiumWebBrowser WebBrowser;
public Form1()
{
InitializeComponent();
WebBrowser = new ChromiumWebBrowser("about:blank");
panel1.Controls.Add(WebBrowser);
WebBrowser.Dock = DockStyle.Fill;
}
private void testButton_Click(object sender, EventArgs e)
{
MessageBox.Show(WebBrowser.CanExecuteJavascriptInMainFrame.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行应用程序,等待几秒钟以确保“about:blank”已加载,然后按testButton。消息框将显示False。事实上,如果我尝试使用,EvaluateScriptAsync我会得到一个异常,告诉我尚未创建上下文。
解决此问题的一种方法是调用ShowDevTools,这似乎以某种方式强制创建上下文。另一种解决方案是导航到非本地页面,例如 Google。在这种情况下,即使我回到“about:blank”,我也能运行脚本。我尝试使用注册的自定义方案CefSettings.RegisterScheme,但导航到我的自定义页面仍然没有创建上下文(我尝试将“about:blank”传递给构造函数,然后导航到我的自定义方案,反之亦然,但没有任何效果) .
那么,是否可以让 CefSharp 创建上下文而不必导航到非本地页面或显示 DevTools?
您将不得不使用以下功能:
WebBrowser.GetMainFrame().ExecuteJavaScriptAsync(string code);
WebBrowser.GetMainFrame().EvaluateScriptAsync(string code);
Run Code Online (Sandbox Code Playgroud)
这绕过了对 的常规检查V8Context。
来自 CefSharp 的更多信息,可在此处找到:
对于不包含 JavaScript 的框架,则不会创建 V8Context。在框架加载后执行脚本可以创建 V8Context。
您可以使用
browser.GetMainFrame().ExecuteJavaScriptAsync(script)或browser.GetMainFrame().EvaluateScriptAsync绕过这些检查。
| 归档时间: |
|
| 查看次数: |
2389 次 |
| 最近记录: |