SVN r1190

SVN-Revision: r1190
This commit is contained in:
cyf
2026-06-01 01:53:15 +00:00
parent 6245aa0768
commit 141493a620
23 changed files with 1491 additions and 278 deletions
@@ -6,4 +6,71 @@ using Xilium.CefGlue;
namespace Lskj.Control.BrowserSetting
{
public class BsRequestHandle
public class BsRequestHandler : CefRequestHandler
{
private readonly CefResourceRequestHandler externalProtocolResourceRequestHandler = new BsExternalProtocolResourceRequestHandler();
protected override CefResourceRequestHandler GetResourceRequestHandler(CefBrowser browser, CefFrame frame, CefRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
if (BsExternalProtocolHandler.IsPrintProtocol(request.Url))
return externalProtocolResourceRequestHandler;
return null;
}
protected override bool OnBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request, bool userGesture, bool isRedirect)
{
string url = request.Url;
if (BsExternalProtocolHandler.IsPrintProtocol(url))
{
if (frame == null || frame.IsMain)
{
BsExternalProtocolHandler.TryHandle(url);
return true;
}
return false;
}
return base.OnBeforeBrowse(browser, frame, request, userGesture, isRedirect);
}
protected override bool OnOpenUrlFromTab(CefBrowser browser, CefFrame frame, string targetUrl, CefWindowOpenDisposition targetDisposition, bool userGesture)
{
if (BsExternalProtocolHandler.TryHandle(targetUrl))
return true;
return base.OnOpenUrlFromTab(browser, frame, targetUrl, targetDisposition, userGesture);
}
protected override void OnRenderProcessTerminated(CefBrowser browser, CefTerminationStatus status)
{
browser.Reload();
}
}
internal static class BsExternalProtocolHandler
{
private const string PrintProtocol = "lskjprint:";
public static bool IsPrintProtocol(string url)
{
return !string.IsNullOrEmpty(url) && url.StartsWith(PrintProtocol, StringComparison.OrdinalIgnoreCase);
}
public static bool TryHandle(string url)
{
if (!IsPrintProtocol(url))
return false;
try
{
var processStartInfo = new System.Diagnostics.ProcessStartInfo(url)
{
UseShellExecute = true
};
System.Diagnostics.Process.Start(processStartInfo);
}
catch (Exception ex)