Winforms CefSharp&x27;CanExecuteJavascriptinInframe';页面加载异步后为false
我在使用时发现错误。 下面是所有要复制的代码 1) 正在等待Winforms CefSharp&x27;CanExecuteJavascriptinInframe';页面加载异步后为false,winforms,cefsharp,cefsharp.offscreen,Winforms,Cefsharp,Cefsharp.offscreen,我在使用时发现错误。 下面是所有要复制的代码 1) 正在等待新建ChromiumWebBrowser(“https://www.google.com/“”已加载页面 2) 然后按按钮1。 结果:canExecuteJs将为false,而canExecuteJs1将为true public ChromiumWebBrowser chromeBrowser; public Form1() { InitializeComponent(); Cef.EnableHighDPISupp
新建ChromiumWebBrowser(“https://www.google.com/“”
已加载页面
2) 然后按按钮1
。
结果:canExecuteJs
将为false
,而canExecuteJs1
将为true
public ChromiumWebBrowser chromeBrowser;
public Form1()
{
InitializeComponent();
Cef.EnableHighDPISupport();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("https://www.google.com/");
Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
public Task LoadPageAsync(IWebBrowser browser, string address = null)
{
var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
EventHandler<LoadingStateChangedEventArgs> handler = null;
handler = (sender, args) =>
{
if (!args.IsLoading)
{
browser.LoadingStateChanged -= handler;
tcs.TrySetResult(true);
}
};
browser.LoadingStateChanged += handler;
if (!string.IsNullOrEmpty(address))
browser.Load(address);
return tcs.Task;
}
private async void button1_Click(object sender, EventArgs e)
{
await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59862329/wordpress-submit-form-into-new-tab-and-continue-processing");
var canExecuteJs = chromeBrowser.CanExecuteJavascriptInMainFrame; //FALSE
await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59861819/getting-2-values-from-array-of-objects");
var canExecuteJs1 = chromeBrowser.CanExecuteJavascriptInMainFrame; //TRUE
}
另一方面,如果不等待新建ChromiumWebBrowser(“https://www.google.com/“”
要加载的页面,当屏幕上出现按钮时,单击它,两个变量都将为真
public ChromiumWebBrowser chromeBrowser;
public Form1()
{
InitializeComponent();
Cef.EnableHighDPISupport();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("https://www.google.com/");
Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
public Task LoadPageAsync(IWebBrowser browser, string address = null)
{
var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
EventHandler<LoadingStateChangedEventArgs> handler = null;
handler = (sender, args) =>
{
if (!args.IsLoading)
{
browser.LoadingStateChanged -= handler;
tcs.TrySetResult(true);
}
};
browser.LoadingStateChanged += handler;
if (!string.IsNullOrEmpty(address))
browser.Load(address);
return tcs.Task;
}
private async void button1_Click(object sender, EventArgs e)
{
await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59862329/wordpress-submit-form-into-new-tab-and-continue-processing");
var canExecuteJs = chromeBrowser.CanExecuteJavascriptInMainFrame; //FALSE
await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59861819/getting-2-values-from-array-of-objects");
var canExecuteJs1 = chromeBrowser.CanExecuteJavascriptInMainFrame; //TRUE
}
公共ChromiumWebBrowser chromeBrowser;
公共表格1()
{
初始化组件();
Cef.EnableHighDPISupport();
初始化(设置);
chromeBrowser=新的ChromiumWebBrowser(“https://www.google.com/");
控件。添加(chromeBrowser);
chromeBrowser.Dock=DockStyle.Fill;
}
公共任务LoadPageAsync(IWebBrowser浏览器,字符串地址=null)
{
var tcs=新TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
EventHandler=null;
处理程序=(发送方,参数)=>
{
如果(!args.IsLoading)
{
browser.LoadingStateChanged-=处理程序;
tcs.TrySetResult(真);
}
};
browser.LoadingStateChanged+=处理程序;
如果(!string.IsNullOrEmpty(地址))
浏览器加载(地址);
返回tcs.Task;
}
私有异步无效按钮1\u单击(对象发送方,事件参数e)
{
等待LoadPageAsync(chromeBrowser,“https://stackoverflow.com/questions/59862329/wordpress-submit-form-into-new-tab-and-continue-processing");
var canExecuteJs=chromeBrowser.canexecutejavascriptinInframe;//FALSE
等待LoadPageAsync(chromeBrowser,“https://stackoverflow.com/questions/59861819/getting-2-values-from-array-of-objects");
var canExecuteJs1=chromeBrowser.canexecutejavascriptinInframe;//TRUE
}
感谢您提供的详细示例,我将查看一下我创建的示例。可能我们最终会删除CanExecuteJavascriptinInframe,因为它现在不可靠。@amaitland。只是想让您知道,当这个属性为false时,javaScript的执行也会失败。您需要直接在框架上执行javaScript以避免检查。