Search code examples
cefsharpchromium-embedded

cefsharp - "Links that open a specific application" seem to be not working


I just begin with Cefsharp on C#.
Everything works fine except Cefsharp can not execute some special links that open/run a specific application on the computer.
The link still works on other Chromium official browsers (Google Chrome), I clicked the link and it launches the application. Cefshap is not, it does nothing when I clicked the link.
The link looks something like this: "runapp://api.abcxyz/..."
How can I make it work on Cefsharp?

image show that the link works on other chromium browsers


Solution

  • Firstly for security reasons loading of external protocols is disabled by default. Historically you would have implemented OnProtocolExecution. There is currently an upstream bug in OnProtocolExecution see https://bitbucket.org/chromiumembedded/cef/issues/2715/onprotocolexecution-page-goes-blank-after

    You can implement a workaround using RequestHandler.OnBeforeBrowser and calling Process.Start

    It would look roughly something like the following (Written in Notepad++ very quickly, there maybe minor mistakes that you'd have to correct).

    public class ExampleRequestHandler : RequestHandler
    {
        protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
        {
            if(request.Url.StartsWith("mailto:"))
            {
                System.Diagnostics.Process.Start(request.Url);
                //Cancel navigation
                return true;
            }
            return false;
        }
    }
    
    browser.RequestHandler = new ExampleRequestHandler();