Files
lserp_cs_6.0/插件库/Lskj.Control/BrowserSetting/BsRequestHandler.cs
T
cyf 141493a620 SVN r1190
SVN-Revision: r1190
2026-06-01 01:53:15 +00:00

76 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xilium.CefGlue;
namespace Lskj.Control.BrowserSetting
{
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)