如何在cefsharp资源处理程序中调用一个简单的javascript方法-OnBeforeResourceLoad-

时间:2016-02-26 01:10:39

标签: javascript c# asynchronous chromium-embedded cefsharp

这是我想阻止加载页面时要显示的内容的地方。

这个函数只返回true或false

   _myfilters.blocking.matches('" + request.Url + "', '" + elType + "',  document.location.href.replace(/#.*$/, ''));

我想根据上面的这个javascript方法决定CefReturnValue。

我该怎么做?

    CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
bool result = ... this is coming from javascript, how ?

if (result ) 
CefReturnValue.Cancel;
else
CefReturnValue.Continue;

}

//我的方法

   CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
    {



        string elType = "object";


        CefReturnValue cc = CefReturnValue.Continue;


        //  Task<CefSharp.JavascriptResponse> response = BrowserView.browser.EvaluateScriptAsync(" function() { return _myfilters.blocking.matches('" + request.Url + "', '" + elType + "',  document.location.href.replace(/#.*$/, '')); } ");
        Task<CefSharp.JavascriptResponse> response = BrowserView.browser.EvaluateScriptAsync("onBeforeRequestHandler({type:'" + elType + "' , url:'" + request.Url + "' , frameDomain:document.location.href.replace(/#.*$/, '')});");
        Func<Task<CefSharp.JavascriptResponse>> func = () =>
            {

                response.Wait();
                return response;
            };

        func.BeginInvoke((ar) =>
        {
            var result = func.EndInvoke(ar);
            if (result.Result.Result != null && bool.Parse(result.Result.Result.ToString()))
            {
                cc = CefReturnValue.Cancel;
            }
        },
        null);

        return cc;
    }

0 个答案:

没有答案