Browse Source

加入cefsharp进程访问

master
С·æ 4 years ago
parent
commit
1200ad97d7
  1. 18
      客户端/齐越慧眼/齐越慧眼/App.xaml.cs
  2. 2
      客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs
  3. 72
      客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandler.cs
  4. 25
      客户端/齐越慧眼/齐越慧眼/cefhelper/SchemeHandlerFactory.cs
  5. 6
      客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj

18
客户端/齐越慧眼/齐越慧眼/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 齐越慧眼
/// </summary>
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);
}
}
}

2
客户端/齐越慧眼/齐越慧眼/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");
}
}
}

72
客户端/齐越慧眼/齐越慧眼/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;
}
}
}

25
客户端/齐越慧眼/齐越慧眼/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,当然你也可以改成其他的
}
}
}
}

6
客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj

@ -6,6 +6,10 @@
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<None Remove="webpages\cats.html" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CefSharp.Wpf.NETCore" Version="94.4.50" />
<PackageReference Include="HandyControl" Version="3.2.0" />
@ -13,7 +17,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="webpages\" />
<EmbeddedResource Include="webpages\cats.html" />
</ItemGroup>
</Project>

Loading…
Cancel
Save