From 1200ad97d704e99419b3df055b5f22a6eb404daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=C2=B7=C3=A6?= <279202647@qq.com> Date: Sun, 17 Oct 2021 12:35:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5cefsharp=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../齐越慧眼/齐越慧眼/App.xaml.cs | 18 ++++- .../UserControls/CatControl.xaml.cs | 2 +- .../齐越慧眼/cefhelper/SchemeHandler.cs | 72 +++++++++++++++++++ .../cefhelper/SchemeHandlerFactory.cs | 25 +++++++ .../齐越慧眼/齐越慧眼.csproj | 6 +- 5 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandler.cs create mode 100644 客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandlerFactory.cs diff --git a/客户端/齐越慧眼/齐越慧眼/App.xaml.cs b/客户端/齐越慧眼/齐越慧眼/App.xaml.cs index 9ad27c5..cb40dfe 100644 --- a/客户端/齐越慧眼/齐越慧眼/App.xaml.cs +++ b/客户端/齐越慧眼/齐越慧眼/App.xaml.cs @@ -1,10 +1,13 @@ -using System; +using CefSharp; +using CefSharp.Wpf; +using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; +using 齐越慧眼.cefhelper; namespace 齐越慧眼 { @@ -13,5 +16,18 @@ namespace 齐越慧眼 /// public partial class App : Application { + public App() { + var settings = new CefSettings(); + // ... + + settings.RegisterScheme(new CefCustomScheme() + { + SchemeName = ResourceSchemeHandlerFactory.SchemeName, + SchemeHandlerFactory = new ResourceSchemeHandlerFactory() + }); + + // ... + Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null); + } } } diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs index fe36fc4..ed1bc9f 100644 --- a/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs +++ b/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs @@ -26,7 +26,7 @@ namespace 齐越慧眼.UserControls private void CatControl_Loaded(object sender, RoutedEventArgs e) { - web.Load(@"D:\2019\德邑海外仓系统\客户端\dist\index.html"); + web.Load("nacollector://webpages/cats.html"); } } } diff --git a/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandler.cs b/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandler.cs new file mode 100644 index 0000000..47940df --- /dev/null +++ b/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandler.cs @@ -0,0 +1,72 @@ +using System; +using CefSharp; +using System.IO; +using System.Net; +using System.Reflection; +using System.Threading.Tasks; + +namespace 齐越慧眼.cefhelper +{ + + public class ResourceSchemeHandler : ResourceHandler + { + public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) + { + var names = this.GetType().Assembly.GetManifestResourceNames(); + + Uri u = new Uri(request.Url); + String file = u.Authority + u.AbsolutePath; // 注:目录名需全为小写字母,否则将无法得到 Resource + + Assembly ass = Assembly.GetExecutingAssembly(); + String resourcePath = ass.GetName().Name + "." + file.Replace("/", "."); // 你可以设置断点看看这里的值 + + Task.Run(() => + { + using (callback) + { + if (ass.GetManifestResourceInfo(resourcePath) != null) + { + Stream stream = ass.GetManifestResourceStream(resourcePath); + string mimeType = "application/octet-stream"; + switch (Path.GetExtension(file)) + { + case ".html": + mimeType = "text/html"; + break; + case ".js": + mimeType = "text/javascript"; + break; + case ".css": + mimeType = "text/css"; + break; + case ".png": + mimeType = "image/png"; + break; + case ".appcache": + break; + case ".manifest": + mimeType = "text/cache-manifest"; + break; + } + + // Reset the stream position to 0 so the stream can be copied into the underlying unmanaged buffer + stream.Position = 0; + // Populate the response values - No longer need to implement GetResponseHeaders (unless you need to perform a redirect) + ResponseLength = stream.Length; + MimeType = mimeType; + StatusCode = (int)HttpStatusCode.OK; + Stream = stream; + + callback.Continue(); + } + else + { + callback.Cancel(); + } + } + }); + + return CefReturnValue.Continue; + } + } +} diff --git a/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandlerFactory.cs b/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandlerFactory.cs new file mode 100644 index 0000000..ae63ba6 --- /dev/null +++ b/客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandlerFactory.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CefSharp; + +namespace 齐越慧眼.cefhelper +{ + class ResourceSchemeHandlerFactory : ISchemeHandlerFactory + { + public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request) + { + return new ResourceSchemeHandler(); + } + + public static string SchemeName + { + get + { + return "nacollector"; // 这里我设置的 SchemeName 为 nacollector,当然你也可以改成其他的 + } + } + } +} diff --git a/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj b/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj index 9c30366..977f592 100644 --- a/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj +++ b/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj @@ -6,6 +6,10 @@ true + + + + @@ -13,7 +17,7 @@ - +