我有一个想要使用的简单自定义协议方案使用CefSharp在Windows中“启动”文件。该计划有效,但我找不到办法防止铬进入该文件的URL(在Process.Start成功调用之后)在下面的代码中)。我尝试了几乎所有的组合CefReturnValue和callback.Dispose和request.Dispose
这里是代码:
public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback)
{
var uri = new Uri(request.Url);
string requestedPath = WebUtility.UrlDecode(uri.AbsolutePath);
if (requestedPath.StartsWith("///"))
requestedPath = requestedPath.Substring(3).Replace("/", @"\");
if (File.Exists(requestedPath))
Process.Start(requestedPath);
callback.Dispose();
return CefReturnValue.Cancel;
}
有人知道如何防止随后的导航吗?
感谢amaitland,这就是答案-
摘要:谁需要自定义协议?
详细信息:
public class Program
{
// stuff ...
var settings = new CefSettings();
settings.RegisterScheme(new CefCustomScheme
{
SchemeName = EutpProtocol.SchemeName,
SchemeHandlerFactory = new EutpProtocol()
});
// more stuff ...
Cef.Initialize(settings);
}
public class EutpProtocol : ISchemeHandlerFactory
{
public const string SchemeName = "eutp";
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
return new EutpProtocolHandler(browser, frame, schemeName, request);
}
}
public class EutpProtocolHandler : ResourceHandler
{
public EutpProtocolHandler(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
return;
}
public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback)
{
return CefReturnValue.Cancel;
}
}
public class EutpRequestHandler : CefSharp.Handler.RequestHandler
{
public EutpRequestHandler()
{
}
protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser,
IFrame frame, IRequest request, bool userGesture, bool isRedirect)
{
if (request.Url.StartsWith("eutp://file///")) {
string requestedPath = WebUtility.UrlDecode(request.Url.Substring(14));
requestedPath = requestedPath.Replace("/", @"\");
if (File.Exists(requestedPath))
Process.Start(requestedPath);
return true;
}
return false; //this allows the navigation to proceed
}
}
[如果您像我一样想知道是否可以完全放弃自定义协议处理程序,答案是否定的。如果不进行设置,则永远不会有机会拒绝RequestHandler中的导航。