Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms CefSharp&x27;CanExecuteJavascriptinInframe';页面加载异步后为false_Winforms_Cefsharp_Cefsharp.offscreen - Fatal编程技术网

Winforms CefSharp&x27;CanExecuteJavascriptinInframe';页面加载异步后为false

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

我在使用时发现错误。 下面是所有要复制的代码

1) 正在等待
新建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以避免检查。