mirror of
http://git.xinwangdao.com/cnnc-embedded-parts-detect/detect.git
synced 2025-06-24 21:44:12 +08:00
69 lines
2.8 KiB
C#
69 lines
2.8 KiB
C#
![]() |
using System;
|
|||
|
using Xilium.CefGlue;
|
|||
|
|
|||
|
namespace WebViewControl {
|
|||
|
|
|||
|
partial class WebView {
|
|||
|
|
|||
|
private class InternalResourceRequestHandler : CefResourceRequestHandler {
|
|||
|
|
|||
|
public InternalResourceRequestHandler(WebView ownerWebView) {
|
|||
|
OwnerWebView = ownerWebView;
|
|||
|
}
|
|||
|
|
|||
|
private WebView OwnerWebView { get; }
|
|||
|
|
|||
|
protected override CefCookieAccessFilter GetCookieAccessFilter(CefBrowser browser, CefFrame frame, CefRequest request) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
protected override CefResourceHandler GetResourceHandler(CefBrowser browser, CefFrame frame, CefRequest request) {
|
|||
|
if (request.Url == OwnerWebView.DefaultLocalUrl) {
|
|||
|
return AsyncResourceHandler.FromText(OwnerWebView.htmlToLoad ?? "");
|
|||
|
}
|
|||
|
|
|||
|
if (UrlHelper.IsChromeInternalUrl(request.Url)) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
var resourceHandler = new ResourceHandler(request, OwnerWebView.GetRequestUrl(request.Url, (ResourceType)request.ResourceType));
|
|||
|
|
|||
|
void TriggerBeforeResourceLoadEvent() {
|
|||
|
var beforeResourceLoad = OwnerWebView.BeforeResourceLoad;
|
|||
|
if (beforeResourceLoad != null) {
|
|||
|
OwnerWebView.ExecuteWithAsyncErrorHandling(() => beforeResourceLoad(resourceHandler));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (Uri.TryCreate(resourceHandler.Url, UriKind.Absolute, out var url) && url.Scheme == ResourceUrl.EmbeddedScheme) {
|
|||
|
resourceHandler.BeginAsyncResponse(() => {
|
|||
|
var urlWithoutQuery = new UriBuilder(url);
|
|||
|
if (!string.IsNullOrEmpty(url.Query)) {
|
|||
|
urlWithoutQuery.Query = string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
OwnerWebView.ExecuteWithAsyncErrorHandling(() => resourceHandler.LoadEmbeddedResource(urlWithoutQuery.Uri));
|
|||
|
|
|||
|
TriggerBeforeResourceLoadEvent();
|
|||
|
|
|||
|
if (resourceHandler.Handled || OwnerWebView.IgnoreMissingResources) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var resourceLoadFailed = OwnerWebView.ResourceLoadFailed;
|
|||
|
if (resourceLoadFailed != null) {
|
|||
|
resourceLoadFailed(url.ToString());
|
|||
|
} else {
|
|||
|
OwnerWebView.ForwardUnhandledAsyncException(new InvalidOperationException("Resource not found: " + url));
|
|||
|
}
|
|||
|
});
|
|||
|
} else {
|
|||
|
TriggerBeforeResourceLoadEvent();
|
|||
|
}
|
|||
|
|
|||
|
return resourceHandler.Handler;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|