微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cefsharp中js脚本的顺序注册

如何解决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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。