cefsharp中js脚本的顺序注册

问题描述

我有问题。 scriptEventClick 在 scriptGlobal 中没有看到该方法。 我如何知道 scriptGlobal 已在 JS 中注册,以便稍后调用 EvaluateScriptAsPromiseAsync

    public Task<bool> GetResultAfterPageLoad(string pageUrl)
    {
        TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();

        EventHandler<LoadingStateChangedEventArgs> onPageLoaded = null;
        onPageLoaded = async (sender,args) =>
        {
            if (!args.IsLoading)
            {
                _browser.LoadingStateChanged -= onPageLoaded;
                // initialization script
                _browser.ExecuteScriptAsyncWhenPageLoaded(scriptGlobal);

                // script for click button
                JavascriptResponse responseClick = await _browser.EvaluateScriptAsPromiseAsync(scriptEventClick);

                tcs.SetResult(_result);
            }
        };

        _browser.LoadingStateChanged += onPageLoaded;
        _browser.Load(pageUrl);
        return tcs.Task;
    }

哪里

   scriptGlobal = "async function eventClick(){}";
   scriptEventClick = "return eventClick();";

解决方法

此解决方案有效。但我认为这是一个糟糕的答案。因为我不想在循环中使用延迟

    _browser.ExecuteScriptAsyncWhenPageLoaded(scriptGlobal);

    JavascriptResponse responseGlobal = null;
    do
    {
        responseGlobal = await _browser.EvaluateScriptAsync("eventClick");
        await Task.Delay(100);
    }
    while (responseGlobal.Result == null);

    JavascriptResponse responseClick = await _browser.EvaluateScriptAsPromiseAsync(scriptEventClick);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...