mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-29 10:25:50 +08:00
fix: 修复某些js回调在突然终止后弹出的v8报错 (#3072)
Co-authored-by: 辉鸭蛋 <huiyadanli@gmail.com>
This commit is contained in:
@@ -10,8 +10,10 @@ using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using BetterGenshinImpact.Core.Script.Dependence;
|
||||
using BetterGenshinImpact.GameTask.Common;
|
||||
using BetterGenshinImpact.View;
|
||||
using Microsoft.ClearScript.JavaScript;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Script.Project;
|
||||
|
||||
@@ -32,6 +34,7 @@ public class ScriptProject
|
||||
{
|
||||
throw new DirectoryNotFoundException("脚本文件夹不存在:" + ProjectPath);
|
||||
}
|
||||
|
||||
ManifestFile = Path.GetFullPath(Path.Combine(ProjectPath, "manifest.json"));
|
||||
if (!File.Exists(ManifestFile))
|
||||
{
|
||||
@@ -49,6 +52,7 @@ public class ScriptProject
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var stackPanel = new StackPanel
|
||||
{
|
||||
Margin = new Thickness(0, 0, 20, 0) // 给右侧滚动条留出位置
|
||||
@@ -75,7 +79,7 @@ public class ScriptProject
|
||||
private IScriptEngine BuildScriptEngine(PathingPartyConfig? partyConfig)
|
||||
{
|
||||
V8ScriptEngine engine = new V8ScriptEngine(V8ScriptEngineFlags.UseCaseInsensitiveMemberBinding | V8ScriptEngineFlags.EnableTaskPromiseConversion);
|
||||
|
||||
|
||||
// packages 依赖和资源重载
|
||||
var loader = new PackageDocumentLoader(ProjectPath);
|
||||
engine.DocumentSettings.Loader = loader;
|
||||
@@ -93,14 +97,14 @@ public class ScriptProject
|
||||
return engine;
|
||||
}
|
||||
|
||||
public async Task ExecuteAsync(dynamic? context = null, PathingPartyConfig? partyConfig=null)
|
||||
public async Task ExecuteAsync(dynamic? context = null, PathingPartyConfig? partyConfig = null)
|
||||
{
|
||||
// 默认值
|
||||
GlobalMethod.SetGameMetrics(1920, 1080);
|
||||
// 加载代码
|
||||
var code = await LoadCode();
|
||||
var engine = BuildScriptEngine(partyConfig);
|
||||
|
||||
|
||||
// 使用自定义加载器解析脚本文件
|
||||
var loader = (PackageDocumentLoader)engine.DocumentSettings.Loader;
|
||||
|
||||
@@ -109,10 +113,11 @@ public class ScriptProject
|
||||
// 写入配置的内容
|
||||
engine.AddHostObject("settings", context);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
bool useModule = Manifest.Library.Length != 0 ||
|
||||
code.Contains("import ", StringComparison.Ordinal) ||
|
||||
bool useModule = Manifest.Library.Length != 0 ||
|
||||
code.Contains("import ", StringComparison.Ordinal) ||
|
||||
code.Contains("export ", StringComparison.Ordinal);
|
||||
|
||||
if (useModule)
|
||||
@@ -140,7 +145,16 @@ public class ScriptProject
|
||||
}
|
||||
finally
|
||||
{
|
||||
HtmlMaskWindow.CloseAll();
|
||||
// 终止代码执行
|
||||
try
|
||||
{
|
||||
engine.Interrupt();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
TaskControl.Logger.LogError(e, "中断脚本执行异常:" + e.Message);
|
||||
}
|
||||
|
||||
engine.Dispose();
|
||||
}
|
||||
}
|
||||
@@ -155,4 +169,4 @@ public class ScriptProject
|
||||
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user