cefsharp - "Links that open a specific application" 似乎不起作用
cefsharp - "Links that open a specific application" seem to be not working
我刚开始使用 C# 上的 Cefsharp。
一切正常,除了 Cefsharp 无法执行计算机上 open/run 特定应用程序的某些特殊 link。
link 仍然适用于其他 Chromium 官方浏览器 (Google Chrome),我单击 link 并启动应用程序。 Cefshap 不是,当我点击 link 时它什么都不做。
link 看起来像这样:“runapp://api.abcxyz/...”
如何让它在 Cefsharp 上运行?
image show that the link works on other chromium browsers
首先,出于安全原因,默认情况下禁止加载外部协议。从历史上看,您会实施 OnProtocolExecution
。
当前 OnProtocolExecution
中存在 upstream
错误,请参阅 https://bitbucket.org/chromiumembedded/cef/issues/2715/onprotocolexecution-page-goes-blank-after
您可以使用 RequestHandler.OnBeforeBrowser 并调用 Process.Start
来实现解决方法
大致如下所示(用 Notepad++ 写得很快,可能有一些小错误需要您更正)。
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();
我刚开始使用 C# 上的 Cefsharp。
一切正常,除了 Cefsharp 无法执行计算机上 open/run 特定应用程序的某些特殊 link。
link 仍然适用于其他 Chromium 官方浏览器 (Google Chrome),我单击 link 并启动应用程序。 Cefshap 不是,当我点击 link 时它什么都不做。
link 看起来像这样:“runapp://api.abcxyz/...”
如何让它在 Cefsharp 上运行?
image show that the link works on other chromium browsers
首先,出于安全原因,默认情况下禁止加载外部协议。从历史上看,您会实施 OnProtocolExecution
。
当前 OnProtocolExecution
中存在 upstream
错误,请参阅 https://bitbucket.org/chromiumembedded/cef/issues/2715/onprotocolexecution-page-goes-blank-after
您可以使用 RequestHandler.OnBeforeBrowser 并调用 Process.Start
大致如下所示(用 Notepad++ 写得很快,可能有一些小错误需要您更正)。
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();