Cefsharp падает при запуске некоторых скриптов. C# - PullRequest
0 голосов
/ 27 января 2020

Я использую cefsharp для выполнения некоторых JavaScript команд в среде браузера (консоли) внутри al oop.

Например, когда я хочу выполнить команду типа Goog_AdSense_ (связанную с " Google AdSense "), происходит сбой cefsharp, а остальная часть l oop не будет выполнена.

Я знаю, что cefsharp использует IRequestHandler интерфейс для вызова OnRenderProcessTerminated метода для отображения ошибки, но интересно, как чтобы продолжить отсюда!

Как выполнить и запустить остальную часть l oop?

class InternalBrowser
{
    void CheckJS(AppSignature app, InternalBrowser browser, Scripts scripts)
    {
        foreach (var script in scripts)
            browser.RunScript(script);
    }

    public bool RunScript(string script, InternalBrowser browser)
    {
        Task<JavascriptResponse> task = browser.EvaluateScriptAsync(script);
        task.Wait();

        bool result = task.Result.Success && (task.Result.Result != null);

        return result;
    }
}


class RequestHandler : IRequestHandler
{
    public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
    {
    }

    public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
    {
        return false;
    }

    public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
    {

    }

    public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
    {
        //Here is the error display
    }
    public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
    {
        return false;
    }

    public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
    {
    }

    public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
    {
        var t = response.ResponseHeaders;
        return false;
    }

    public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
    {
        return false;
    }

    public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    {
        return CefReturnValue.Continue;
    }

    public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
    {
        return false;
    }

    public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
    {
        return false;
    }

    public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
    {
        return false;
    }
}

Пример в консоли Google chrome:

An example in the google chrome console

...