Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit 61c1abc

Browse files
committed
Version 1.3.0.0! Update CefShap and Ui, fix some bugs.
1 parent db0b527 commit 61c1abc

33 files changed

+279
-4537
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "NacollectorFrontend"]
2+
path = NacollectorFrontend
3+
url = https://github.com/qwqcode/NacollectorFrontend

Nacollector/Resources/cef_sharp/.gitignore renamed to CefSharp/.gitignore

File renamed without changes.

Nacollector/Browser/CrBrowser.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,28 @@ public CrBrowser(MainForm form, string address)
2626
browser = new ChromiumWebBrowser(address);
2727

2828
// BrowserSettings 必须在 Controls.Add 之前
29-
BrowserSettings browserSettings = new BrowserSettings();
30-
// browserSettings.WebSecurity = CefState.Disabled
31-
browserSettings.FileAccessFromFileUrls = CefState.Enabled; // 必须 Enabled 不然 AJAX 请求 file:// 会显示 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
32-
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
33-
browserSettings.DefaultEncoding = "UTF-8";
34-
browserSettings.BackgroundColor = (uint)ColorTranslator.FromHtml("#333333").ToArgb();
29+
BrowserSettings browserSettings = new BrowserSettings
30+
{
31+
// FileAccessFromFileUrls 必须 Enabled
32+
// 不然 AJAX 请求 file:// 会显示
33+
// Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
34+
FileAccessFromFileUrls = CefState.Enabled,
35+
UniversalAccessFromFileUrls = CefState.Enabled,
36+
DefaultEncoding = "UTF-8",
37+
BackgroundColor = (uint)ColorTranslator.FromHtml("#21252b").ToArgb()
38+
};
39+
browserSettings.WebSecurity = CefState.Disabled;
3540
browser.BrowserSettings = browserSettings;
3641

37-
browser.MenuHandler = new MenuHandler();
42+
browser.MenuHandler = new MenuHandler(this);
3843
browser.LifeSpanHandler = new LifeSpanHandler();
3944
browser.LoadHandler = new LoadHandler();
4045
browser.DragHandler = new DragDropHandler();
4146

4247
browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(Browser_onFrameLoadEnd);
4348
browser.IsBrowserInitializedChanged += new EventHandler<IsBrowserInitializedChangedEventArgs>(Browser_onIsBrowserInitializedChanged);
4449
}
45-
50+
4651
// Frame 加载完毕时执行
4752
private void Browser_onFrameLoadEnd(object sender, FrameLoadEndEventArgs e)
4853
{
@@ -70,8 +75,11 @@ private void Browser_onIsBrowserInitializedChanged(object sender, IsBrowserIniti
7075
}
7176
else if (message.Msg == (int)WindowMessages.WM_LBUTTONDOWN) // 鼠标左键按下
7277
{
73-
NativeMethods.ReleaseCapture();
74-
form.SendHandleMessage(); // 执行 模拟标题栏拖动
78+
form.Invoke((MethodInvoker)delegate
79+
{
80+
NativeMethods.ReleaseCapture();
81+
NativeMethods.SendMessage(form.Handle, (int)WindowMessages.WM_NCLBUTTONDOWN, (int)HitTestValues.HTCAPTION, 0); // 执行 模拟标题栏拖动
82+
});
7583
}
7684
else if (message.Msg == (int)WindowMessages.WM_RBUTTONDOWN) // 鼠标右键按下
7785
{
@@ -139,5 +147,12 @@ await task.ContinueWith(res => {
139147
}
140148
return result;
141149
}
150+
151+
public void DownloadUrl(string url)
152+
{
153+
var cefBrowser = browser.GetBrowser();
154+
IBrowserHost ibwhost = cefBrowser == null ? null : cefBrowser.GetHost();
155+
ibwhost.StartDownload(url);
156+
}
142157
}
143158
}

Nacollector/Browser/CrDownloads.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ private void DownloadDo(string doType, ChromiumWebBrowser browser, EventArgs e)
178178
downloadUrl = downloadItem.OriginalUrl,
179179
totalBytes = downloadItem.TotalBytes,
180180
});
181-
browser.ExecuteScriptAsync($"downloads.addTask({callbackObj})");
181+
browser.ExecuteScriptAsync($"Downloads.addTask({callbackObj})");
182182
}
183183
else if (doType == "update")
184184
{
@@ -191,7 +191,7 @@ private void DownloadDo(string doType, ChromiumWebBrowser browser, EventArgs e)
191191
fullPath = downloadItem.FullPath,
192192
downloadUrl = downloadItem.Url
193193
});
194-
browser.ExecuteScriptAsync($"downloads.updateTask({callbackObj})");
194+
browser.ExecuteScriptAsync($"Downloads.updateTask({callbackObj})");
195195
}
196196
}
197197
}

Nacollector/Browser/Handler/MenuHandler.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ namespace Nacollector.Browser.Handler
1111
{
1212
public class MenuHandler : IContextMenuHandler
1313
{
14+
private CrBrowser crBrowser;
1415
private bool _showReload = false;
1516

16-
public MenuHandler(bool showReload = false)
17+
public MenuHandler(CrBrowser crBrowser, bool showReload = false)
1718
{
19+
this.crBrowser = crBrowser;
1820
_showReload = showReload;
1921
}
2022

@@ -24,7 +26,7 @@ public MenuHandler(bool showReload = false)
2426
private const int SaveLink = 26504;
2527
private const int CopyLink = 26505;
2628
private const int LinkOpenDefaultBrowser = 26506;
27-
private const int LinkToZneiatProject = 26507;
29+
private const int LinkToQWQCODEProject = 26507;
2830
private const int FeedbackProject = 26508;
2931

3032
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
@@ -80,7 +82,7 @@ void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowse
8082
if (_showReload)
8183
model.AddItem(CefMenuCommand.ReloadNoCache, "刷新 (ReloadNoCache)");
8284
model.AddItem((CefMenuCommand)FeedbackProject, "反馈问题");
83-
model.AddItem((CefMenuCommand)LinkToZneiatProject, "开源项目");
85+
model.AddItem((CefMenuCommand)LinkToQWQCODEProject, "开源项目");
8486
# if DEBUG
8587
model.AddItem((CefMenuCommand)ShowDevTools, "检查 (ShowDevTools)");
8688
# endif
@@ -114,11 +116,11 @@ bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrows
114116
case LinkOpenDefaultBrowser:
115117
System.Diagnostics.Process.Start("explorer.exe", parameters.UnfilteredLinkUrl);
116118
break;
117-
case LinkToZneiatProject:
118-
System.Diagnostics.Process.Start("https://github.com/Zneiat/Nacollector");
119+
case LinkToQWQCODEProject:
120+
System.Diagnostics.Process.Start("https://github.com/qwqcode/Nacollector");
119121
break;
120122
case FeedbackProject:
121-
System.Diagnostics.Process.Start("https://github.com/Zneiat/Nacollector/issues");
123+
System.Diagnostics.Process.Start("https://github.com/qwqcode/Nacollector/issues");
122124
break;
123125
}
124126

@@ -132,7 +134,7 @@ bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrows
132134
/// <param name="frame"></param>
133135
void ExecuteSaveFileByUrl(string url, IFrame frame)
134136
{
135-
frame.ExecuteJavaScriptAsync("var a = document.createElement('a');a.setAttribute('href', \"" + url + "\");a.setAttribute('download','');a.click();");
137+
crBrowser.DownloadUrl(url);
136138
}
137139

138140
void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using CefSharp;
2+
using System;
3+
using System.IO;
4+
using System.Net;
5+
using System.Reflection;
6+
using System.Threading.Tasks;
7+
8+
public class ResourceSchemeHandler : ResourceHandler
9+
{
10+
public override bool ProcessRequestAsync(IRequest request, ICallback callback)
11+
{
12+
Uri u = new Uri(request.Url);
13+
String file = u.Authority + u.AbsolutePath;
14+
15+
Assembly ass = Assembly.GetExecutingAssembly();
16+
String resourcePath = ass.GetName().Name + "." + file.Replace("/", ".");
17+
18+
Task.Run(() =>
19+
{
20+
using (callback)
21+
{
22+
if (ass.GetManifestResourceInfo(resourcePath) != null)
23+
{
24+
Stream stream = ass.GetManifestResourceStream(resourcePath);
25+
string mimeType = "application/octet-stream";
26+
switch (Path.GetExtension(file))
27+
{
28+
case ".html":
29+
mimeType = "text/html";
30+
break;
31+
case ".js":
32+
mimeType = "text/javascript";
33+
break;
34+
case ".png":
35+
mimeType = "image/png";
36+
break;
37+
case ".appcache":
38+
case ".manifest":
39+
mimeType = "text/cache-manifest";
40+
break;
41+
}
42+
43+
// Reset the stream position to 0 so the stream can be copied into the underlying unmanaged buffer
44+
stream.Position = 0;
45+
// Populate the response values - No longer need to implement GetResponseHeaders (unless you need to perform a redirect)
46+
ResponseLength = stream.Length;
47+
MimeType = mimeType;
48+
StatusCode = (int)HttpStatusCode.OK;
49+
Stream = stream;
50+
51+
callback.Continue();
52+
}
53+
else
54+
{
55+
callback.Cancel();
56+
}
57+
}
58+
});
59+
60+
return true;
61+
}
62+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using CefSharp;
7+
8+
class ResourceSchemeHandlerFactory : ISchemeHandlerFactory
9+
{
10+
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
11+
{
12+
return new ResourceSchemeHandler();
13+
}
14+
15+
public static string SchemeName { get { return "resource"; } }
16+
}

Nacollector/ClassDiagram1.cd

Lines changed: 0 additions & 2 deletions
This file was deleted.

Nacollector/JsActions/AppAction.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ public void logFileClear()
7979
Logging.Clear();
8080
}
8181

82+
// 调用浏览器下载文件
83+
public void downloadUrl(string url)
84+
{
85+
crBrowser.DownloadUrl(url);
86+
}
87+
8288
// 升级操作
8389
public void appUpdateAction(string srcUrl, string updateType)
8490
{

Nacollector/MainForm.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,15 @@ public MainForm()
4242
private void InitBrowser()
4343
{
4444
// 初始化内置浏览器
45-
string htmlPath = Utils.GetHtmlResPath("app.html");
45+
#if !DEBUG
46+
string htmlPath = Utils.GetHtmlResPath("index.html");
4647
if (string.IsNullOrEmpty(htmlPath))
4748
{
4849
Application.Exit(); // 退出程序
4950
}
50-
51+
#else
52+
string htmlPath = "http://127.0.0.1:8080";
53+
#endif
5154
crBrowser = new CrBrowser(this, htmlPath);
5255

5356
// Need Update: https://github.com/cefsharp/CefSharp/issues/2246
@@ -125,7 +128,7 @@ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
125128
string dialogTxt = "确定退出 Nacollector?";
126129

127130
// 下载任务数统计
128-
int downloadingTaskNum = Convert.ToInt32(crBrowser.EvaluateScript("downloads.countDownloadingTask();", 0, TimeSpan.FromSeconds(3)).GetAwaiter().GetResult());
131+
int downloadingTaskNum = Convert.ToInt32(crBrowser.EvaluateScript("Downloads.countDownloadingTask();", 0, TimeSpan.FromSeconds(3)).GetAwaiter().GetResult());
129132
if (downloadingTaskNum > 0)
130133
dialogTxt = $"有 {downloadingTaskNum} 个下载任务仍在继续!确定结束下载并关闭程序?";
131134

0 commit comments

Comments
 (0)