Browse Source

代码优化

loki.wu 2 years ago
parent
commit
7b955d01c0

+ 1 - 1
fis/App.axaml.cs

@@ -23,7 +23,7 @@ namespace fis
             if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
             {
                 desktop.MainWindow = mainWindow;
-                ShellConfig.Instance.windowsNum = mainWindow.Screens.ScreenCount;
+                ShellConfig.Instance.WindowsNum = mainWindow.Screens.ScreenCount;
             }
 
             base.OnFrameworkInitializationCompleted();

+ 17 - 27
fis/BaseWindow.cs

@@ -1,20 +1,12 @@
 using Avalonia;
 using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-using fis.Mac;
-using fis.Managers;
 using fis.Utilities;
 using System;
-using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Reflection;
 using System.Runtime.InteropServices;
-using System.Text;
 using System.Threading;
-using System.Threading.Tasks;
-using Xilium.CefGlue.Avalonia;
 
 namespace fis.Win.Utilities
 {
@@ -22,14 +14,15 @@ namespace fis.Win.Utilities
     {
         private TextBlock? _title;
         private string _plateformName = "";
-        private AvaloniaCefBrowser _browser;
 
         /// <summary>
-        /// 是否主窗口
+        /// Flutter 中用FisShellApi来判断当前是否为纯Web环境
         /// </summary>
-        public bool IsMainWindow = true;
+        protected const string JSObjectName = "FisShellApi";
 
-        public virtual string WindowName { get; set; }
+        protected FisBrowserScriptObject ScriptObj { get; private set; }
+
+        public virtual string WindowName { get; protected set; }
 
         public static SynchronizationContext? MainThreadSyncContext;
 
@@ -39,7 +32,6 @@ namespace fis.Win.Utilities
             ExtendClientAreaToDecorationsHint = true;
             ExtendClientAreaChromeHints = Avalonia.Platform.ExtendClientAreaChromeHints.NoChrome;
             ExtendClientAreaTitleBarHeightHint = -1;
-            _browser = BrowserManager.MainBrowser;
 #if DEBUG
             this.AttachDevTools();
 #endif
@@ -47,11 +39,6 @@ namespace fis.Win.Utilities
 
         public void InitializeComponent() 
         {
-            if (!IsMainWindow)
-            {
-                _browser = BrowserManager.SlaveBrowser;
-            }
-            var browserContainer = this.FindControl<Border>("BrowserBorder");
             if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
             {
                 this.FindControl<MacosTitleBar>("MacTitleBar").IsVisible = false;
@@ -68,6 +55,7 @@ namespace fis.Win.Utilities
             {
                 throw new NotSupportedException($"Platform {Environment.OSVersion.Platform} is not suppoorted.");
             }
+            ScriptObj = new FisBrowserScriptObject(_plateformName);
             if (_title != null)
             {
                 var language = CultureInfo.CurrentCulture.Name;
@@ -81,14 +69,6 @@ namespace fis.Win.Utilities
                 }
            
             }
-            var scriptObj = new FisBrowserScriptObject(_title, _plateformName);
-            _browser.RegisterJavascriptObject(scriptObj, "FisShellApi");
-            _browser.BrowserInitialized += () =>
-            {
-#if DEBUG
-                _browser!.ShowDeveloperTools();
-#endif
-            };
             MinWidth = 1366;
             MinHeight = 768;
             var assembly = Assembly.GetExecutingAssembly();
@@ -105,7 +85,17 @@ namespace fis.Win.Utilities
             {
                 Icon = new WindowIcon(resourceStream);
             }
-            browserContainer.Child = _browser;
+        }
+
+        protected void SetWindowTitle(string title) 
+        {
+            MainThreadSyncContext?.Send(new SendOrPostCallback((args) =>
+            {
+                if (_title != null)
+                {
+                    _title.Text = title;
+                }
+            }), this);
         }
     }
 }

+ 1 - 1
fis/IPlatformService.cs

@@ -219,7 +219,7 @@ namespace fis
 
 
         /// <summary>
-        /// Called when close the shell window .
+        /// 跟据窗口名称获取窗口状态
         /// </summary>
         Task<int> GetWindowStateAsync(string windowName);
         #endregion

+ 26 - 25
fis/MainWindow.axaml.cs

@@ -1,25 +1,18 @@
 using System;
-using System.IO;
-using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Markup.Xaml;
 using fis.Win;
-using System.Globalization;
-using System.Reflection;
-using System.Threading;
-using System.Runtime.InteropServices;
 using fis.Managers;
 using fis.Managers.Interfaces;
 using Avalonia.Threading;
 using fis.Utilities;
 using fis.Win.Utilities;
-using System.Linq;
+using System.Collections.Generic;
 
 namespace fis
 {
     public partial class MainWindow : BaseWindow
     {
-        private const string ThisWindowName = "Main";
         private WindowState _windowState = WindowState.Normal;
 
 
@@ -31,16 +24,22 @@ namespace fis
             InitializeMainComponent();
         }
 
-        
-        protected override void HandleWindowStateChanged(WindowState state) 
+
+        protected override void HandleWindowStateChanged(WindowState state)
         {
             _windowState = state;
-            string[] list = { ((int)state).ToString() };
-            BrowserManager.ExecuteJS(TargetMethodName.OnWindowStateChange, list.ToList());
+            BrowserManager.MainBrowser.ExcuteJS(TargetMethodName.OnWindowStateChange, new List<string> { ((int)state).ToString() });
         }
 
         private void InitializeMainComponent()
         {
+            BrowserManager.MainBrowser.RegisterJavascriptObject(ScriptObj, JSObjectName);
+            BrowserManager.MainBrowser.BrowserInitialized += () =>
+            {
+#if DEBUG
+                BrowserManager.MainBrowser!.ShowDeveloperTools();
+#endif
+            };
             //Make cross domain work.
             BrowserManager.MainBrowser.Address = "http://" + ShellConfig.Instance.AppHost + "/index.html";
             BrowserManager.MainBrowser.ContextMenuHandler = new TextContextMenuHandler(BrowserManager.MainBrowser);
@@ -48,10 +47,10 @@ namespace fis
             {
                 WindowDragingHelper.StartMouseMonitor();
                 //Register the main window.
-                WindowDragingHelper.RegisterWindow(ThisWindowName, PlatformImpl.Handle.Handle);
+                WindowDragingHelper.RegisterWindow(WindowName, PlatformImpl.Handle.Handle);
                 winFisBrowser.WindowDragBegan += (sender, e) =>
                 {
-                    if (e == ThisWindowName)
+                    if (e == WindowName)
                     {
                         _windowState = WindowState.Normal;
                         WindowDragingHelper.BeginWindowDrag(e);
@@ -59,15 +58,15 @@ namespace fis
                 };
                 winFisBrowser.WindowDragEnded += (sender, e) =>
                 {
-                    if (e == ThisWindowName)
+                    if (e == WindowName)
                     {
                         WindowDragingHelper.EndWindowDrag(e);
                     }
 
                 };
-                winFisBrowser.WindowMaximized += (sender, e) => 
+                winFisBrowser.WindowMaximized += (sender, e) =>
                 {
-                    if (e == ThisWindowName)
+                    if (e == WindowName)
                     {
                         if (_windowState == WindowState.Maximized)
                         {
@@ -78,17 +77,17 @@ namespace fis
                         WindowDragingHelper.MaximizeWindow(e);
                     }
                 };
-                winFisBrowser.WindowMinimized += (sender, e) => 
+                winFisBrowser.WindowMinimized += (sender, e) =>
                 {
-                    if (e == ThisWindowName)
+                    if (e == WindowName)
                     {
                         _windowState = WindowState.Minimized;
                         WindowDragingHelper.MinimizeWindow(e);
                     }
                 };
-                winFisBrowser.WindowRestored += (sender, e) => 
+                winFisBrowser.WindowRestored += (sender, e) =>
                 {
-                    if (e == ThisWindowName)
+                    if (e == WindowName)
                     {
                         _windowState = WindowState.Normal;
                         WindowDragingHelper.RestoreWindow(e);
@@ -98,15 +97,17 @@ namespace fis
             }
             WindowStartupLocation = WindowStartupLocation.CenterScreen;
             WindowState = WindowState.Maximized;
-            AppManager.ParentWindow = this;
+            AppManager.MainWindow = this;
             Closed += OnMainWindowClosed;
+            var browserContainer = this.FindControl<Border>("BrowserBorder");
+            browserContainer.Child = BrowserManager.MainBrowser;
         }
 
         private void OnBrowserCloseTheWindow(object? sender, string e)
         {
-            if (e == ThisWindowName)
+            if (e == WindowName)
             {
-                Dispatcher.UIThread.Post(new Action(() => Close()));                
+                Dispatcher.UIThread.Post(new Action(() => Close()));
             }
         }
 
@@ -116,7 +117,7 @@ namespace fis
             {
                 WindowDragingHelper.StopMouseMonitor();
                 //UnRegister the main window.
-                WindowDragingHelper.UnRegisterWindow(ThisWindowName);
+                WindowDragingHelper.UnRegisterWindow(WindowName);
             }
             var manager = AppManager.Get<ISecondaryScreenManager>();
             manager.Dispose();

+ 4 - 1
fis/Managers/AppManager.cs

@@ -24,7 +24,10 @@ namespace fis.Managers
             Initialize();
         }
 
-        public static BaseWindow ParentWindow { get; set; }
+        /// <summary>
+        /// 主窗口
+        /// </summary>
+        public static BaseWindow MainWindow { get; set; }
 
         private static AppManager GetInstance()
         {

+ 99 - 88
fis/Managers/BrowserManager.cs

@@ -14,12 +14,59 @@ namespace fis.Managers
 {
     internal class FisBrowser : AvaloniaCefBrowser
     {
+        public virtual void ExcuteJS(TargetMethodName targetMethodName, List<string> arguments) 
+        {
+          //
+        }
+
+        /// <summary>
+        /// 开始拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public virtual void BeginWindowDrag(string windowName)
+        {
+        }
 
+        /// <summary>
+        /// 结束拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public virtual void EndWindowDrag(string windowName)
+        {
+        }
+
+        /// <summary>
+        /// 最小化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public virtual void MinimizeWindow(string windowName)
+        {
+        }
+
+        /// <summary>
+        /// 最大化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public virtual void MaximizeWindow(string windowName)
+        {
+        }
+
+        /// <summary>
+        /// 关闭窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public virtual void CloseWindow(string windowName)
+        {
+        }
     }
 
     internal class MacFisBrowser : FisBrowser
     {
-
+        public override void ExcuteJS(TargetMethodName targetMethodName, List<string> arguments) 
+        {
+            var jsContent = JsContentConvert.GetExcuteJsContent(targetMethodName, arguments);
+            ExecuteJavaScript(jsContent, null, 0);
+        }
     }
 
     internal class WinFisBrowser : FisBrowser
@@ -55,6 +102,57 @@ namespace fis.Managers
                 throw new ArgumentException($"Argument {nameof(service)} should be WinService");
             }
         }
+
+        /// <summary>
+        /// 开始拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public override void BeginWindowDrag(string windowName)
+        {
+            WindowDragBegan?.Invoke(this, windowName);
+        }
+
+        /// <summary>
+        /// 结束拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public override void EndWindowDrag(string windowName)
+        {
+            WindowDragEnded?.Invoke(this,windowName);
+        }
+
+        /// <summary>
+        /// 最小化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public override void MinimizeWindow(string windowName)
+        {
+            WindowMinimized?.Invoke(this,windowName);
+        }
+
+        /// <summary>
+        /// 最大化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public override void MaximizeWindow(string windowName)
+        {
+            WindowMaximized?.Invoke(this,windowName);
+        }
+
+        /// <summary>
+        /// 关闭窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public override void CloseWindow(string windowName)
+        {
+            WindowClosed?.Invoke(this,windowName);
+        }
+
+        public override void ExcuteJS(TargetMethodName targetMethodName, List<string> arguments)
+        {
+            var jsContent = JsContentConvert.GetExcuteJsContent(targetMethodName, arguments);
+            ExecuteJavaScript(jsContent, null, 0);
+        }
     }
 
     internal class BrowserManager
@@ -67,8 +165,6 @@ namespace fis.Managers
 
         private static FisBrowser? _slaveBrowser;
 
-        public const string NotificationName = "externalNotification";
-
         static BrowserManager()
         {
             if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
@@ -164,90 +260,5 @@ namespace fis.Managers
                 return _slaveBrowser;
             }
         }
-
-        /// <summary>
-        /// 开始拖拽
-        /// </summary>
-        /// <param name="windowName"></param>
-        public static void BeginWindowDrag(string windowName)
-        {
-            _platformService.BeginWindowDrag(windowName);
-        }
-
-        /// <summary>
-        /// 结束拖拽
-        /// </summary>
-        /// <param name="windowName"></param>
-        public static void EndWindowDrag(string windowName)
-        {
-            _platformService.EndWindowDrag(windowName);
-        }
-
-        /// <summary>
-        /// 最小化窗口
-        /// </summary>
-        /// <param name="windowName"></param>
-        public static void MinimizeWindow(string windowName)
-        {
-            _platformService.MinimizeWindow(windowName);
-        }
-
-        /// <summary>
-        /// 最大化窗口
-        /// </summary>
-        /// <param name="windowName"></param>
-        public static void MaximizeWindow(string windowName)
-        {
-            _platformService.MaximizeWindow(windowName);
-        }
-
-        /// <summary>
-        /// 关闭窗口
-        /// </summary>
-        /// <param name="windowName"></param>
-        public static void CloseWindow(string windowName)
-        {
-            _platformService.CloseWindow(windowName);
-        }
-
-        /// <summary>
-        /// 执行Js方法
-        /// </summary>
-        /// <param name="methodName"></param>
-        /// <param name="targetMethodName"></param>
-        /// <param name="arguments"></param>
-        public static void ExecuteJS(TargetMethodName targetMethodName, List<string> arguments, bool isMainBrowser = true)
-        {
-            string callString = NotificationName + "(";
-            if (arguments != null)
-            {
-                string comma = ", ";
-                var argumentsStr = "";
-                int index = 0;
-                foreach (var e in arguments)
-                {
-                    if (index == arguments.Count - 1)
-                    {
-                        argumentsStr += e;
-                    }
-                    else
-                    {
-                        argumentsStr += e + "&";
-                    }
-                    index++;
-                }
-                var escaped = System.Web.HttpUtility.JavaScriptStringEncode(argumentsStr, true);
-                callString += (int)targetMethodName + comma + escaped + comma + "";
-            }
-            callString += ");";
-            if (isMainBrowser)
-            {
-                MainBrowser?.ExecuteJavaScript(callString, null, 0);
-            }
-            else 
-            {
-                SlaveBrowser?.ExecuteJavaScript(callString, null, 0);
-            }
-        }
     }
 }

+ 4 - 4
fis/Managers/FileExporterManager.cs

@@ -56,11 +56,11 @@ namespace fis.Managers
 
         private void NotifyTheProgress(double progress, ExportStatus exportStatus)
         {
-            var callString = PlatFormHelper.GetMethodStr(BrowserManager.NotificationName, TargetMethodName.UpdateExportProgess, new List<string>() { 
+            var args = new List<string>() {
             progress.ToString(),
             ((int)exportStatus).ToString()
-            });
-            BrowserManager.MainBrowser.ExecuteJavaScript(callString, null, 0);
+            };
+            BrowserManager.MainBrowser.ExcuteJS(TargetMethodName.UpdateExportProgess, args);
         }
 
         private void DoPackaging()
@@ -356,7 +356,7 @@ namespace fis.Managers
             var savedialog = new SaveFileDialog();
             savedialog.Title = "";
             savedialog.InitialFileName = fileName;
-            var fileExportedPath = await savedialog.ShowAsync(AppManager.ParentWindow);
+            var fileExportedPath = await savedialog.ShowAsync(AppManager.MainWindow);
             if (string.IsNullOrEmpty(fileExportedPath))
             {
                 return AppDomain.CurrentDomain.BaseDirectory;

+ 1 - 1
fis/Managers/SecondaryScreenManager.cs

@@ -31,7 +31,7 @@ namespace fis.Managers
                 {
                     SlaveWindow = new SlaveWindow();
                     SlaveWindow.Closed += SlaveWindow_Closed;
-                    SlaveWindow.init(host, keyValuePairs);
+                    SlaveWindow.InitParameters(host, keyValuePairs);
                     if (SlaveWindow.Screens.ScreenCount > 1)
                     {
                         var screen = SlaveWindow.Screens.All.FirstOrDefault(x => !x.Primary);

+ 3 - 6
fis/Managers/Ultra3DManager.cs

@@ -97,8 +97,7 @@ namespace fis.Managers
                     height,
                     surfaceFiles
                 };
-                var callString = PlatFormHelper.GetMethodStr(BrowserManager.NotificationName, TargetMethodName.SetSurface, args);               
-                BrowserManager.SlaveBrowser?.ExecuteJavaScript(callString, null, 0);                
+                BrowserManager.SlaveBrowser?.ExcuteJS(TargetMethodName.SetSurface, args);                
             }
             catch (Exception exception)
             {
@@ -108,8 +107,7 @@ namespace fis.Managers
 
         private void MDFileReady(string key)
         {
-            var callString = PlatFormHelper.GetMethodStr(BrowserManager.NotificationName, TargetMethodName.MdlFileLoaded, new List<string>() { key});
-            BrowserManager.SlaveBrowser?.ExecuteJavaScript(callString, null, 0);
+            BrowserManager.SlaveBrowser?.ExcuteJS(TargetMethodName.MdlFileLoaded, new List<string>() { key });
         }
 
         public async void AdjustImage(Bitmap bitmap)
@@ -120,8 +118,7 @@ namespace fis.Managers
                 var args = new List<string>{
                     base64
                 };
-                var callString = PlatFormHelper.GetMethodStr(BrowserManager.NotificationName, TargetMethodName.AdjustPlaneImage, args);
-                BrowserManager.SlaveBrowser?.ExecuteJavaScript(callString, null, 0);
+                BrowserManager.SlaveBrowser?.ExcuteJS(TargetMethodName.AdjustPlaneImage, args);
             }
             catch (Exception exception)
             {

+ 4 - 4
fis/PlatformService.cs

@@ -22,7 +22,7 @@ namespace fis
 
         public string? GetConfig() => AppManager.Get<IConfigManager>().GetConfigAsync().Result;
 
-        public int GetWindowsNum() => ShellConfig.Instance.windowsNum;
+        public int GetWindowsNum() => ShellConfig.Instance.WindowsNum;
 
         public bool SaveText(string name, string text) => AppManager.Get<ITextFileManager>().SaveTextAsync(name, text).Result;
 
@@ -35,7 +35,7 @@ namespace fis
         public bool AbortExportOperation() => AppManager.Get<IFileExporterManager>().AbortExportOperation();
 
         /// <summary>
-        /// 关闭第二窗口
+        /// 副窗口Token过期时,关闭第二窗口,通知主窗口退出登录
         /// </summary>
         public void CloseSlaveWindow() {
             var manager = AppManager.Get<ISecondaryScreenManager>();
@@ -43,7 +43,7 @@ namespace fis
             if (window != null)
             {
                 window.Close();
-                BrowserManager.ExecuteJS(TargetMethodName.Logout,new List<string>());
+                BrowserManager.MainBrowser.ExcuteJS(TargetMethodName.Logout,new List<string>());
             }
         }
 
@@ -139,7 +139,7 @@ namespace fis
             args.Add(templateJson);
             if (window != null) 
             {
-                BrowserManager.ExecuteJS( TargetMethodName.SaveReportTemplate, args);
+                BrowserManager.MainBrowser.ExcuteJS( TargetMethodName.SaveReportTemplate, args);
             }
         }
 

+ 1 - 13
fis/ShellConfig.cs

@@ -11,22 +11,14 @@ namespace fis
         /// <summary>
         /// 窗口数量
         /// </summary>
-        public int windowsNum = 0;
+        public int WindowsNum { get; set; } = 1;
 
         //Gets or sets the app host which is the web App's access url
         public string AppHost { get; set; } = "app.fis.plus";
-
-        /// <summary>
-        /// 模板设计器
-        /// </summary>
-        public string DistHost { get; set; } = "2.flyinsono.com/report/#/reportTemplateDesigner";
         
         //Gets or sets the App resource path, which stores the web content and its resources.
         public string AppResourcePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App", "flyinsono");
 
-        //模板设计器文件地址
-        public string DistResourcePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App", "dist");
-
         //Gets or sets the api host for local call, usually provider platform apis.
         public string LocalApiHost { get; set; } = "platform.fis.plus";
 
@@ -36,10 +28,6 @@ namespace fis
         //Gets or sets the resource path for local application resources, eg. icons, images, audios and videos.
         public string LocalResourcePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources");
 
-        //Gets or sets the client temp files, eg. logs, caches.
-        public string DataPath { get; set; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Vinno", "Flyinsono");
-
-
         private static ShellConfig Load()
         {
             var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ShellConfig.json");

+ 19 - 10
fis/SlaveWindow.axaml.cs

@@ -21,10 +21,7 @@ namespace fis
 {
     public partial class SlaveWindow : BaseWindow
     {
-       
-        private AvaloniaCefBrowser _browser;
         private string _host = "";
-
         private Dictionary<string, string> _parameters = new Dictionary<string, string>();
 
         /// <summary>
@@ -34,20 +31,32 @@ namespace fis
 
         public SlaveWindow()
         {
-            IsMainWindow = false;
             WindowName = "Slave";
             AvaloniaXamlLoader.Load(this);
             InitializeComponent();
-            _browser = BrowserManager.SlaveBrowser;
+            InitializeSlaveComponent();
             Closing += SlaveWindow_Closing;
         }
 
+        private void InitializeSlaveComponent()
+        {
+            BrowserManager.SlaveBrowser.RegisterJavascriptObject(ScriptObj, JSObjectName);
+            BrowserManager.SlaveBrowser.BrowserInitialized += () =>
+            {
+#if DEBUG
+                BrowserManager.SlaveBrowser!.ShowDeveloperTools();
+#endif
+            };
+            var browserContainer = this.FindControl<Border>("BrowserBorder");
+            browserContainer.Child = BrowserManager.SlaveBrowser;
+        }
+
         /// <summary>
-        /// 初始化参数和组件
+        /// 副窗口启动时初始化地址栏参数
         /// </summary>
         /// <param name="host"></param>
         /// <param name="dictionary"></param>
-        public void init(string host, Dictionary<string, string> dictionary)
+        public void InitParameters(string host, Dictionary<string, string> dictionary)
         {
             _parameters = dictionary;
             _host = host;
@@ -66,11 +75,11 @@ namespace fis
             if (parameter.Length > 0)
             {
                 var url = "http://" + ShellConfig.Instance.AppHost + "/index.html?page=measure&" + parameter;
-                _browser.Address = url;
+                BrowserManager.SlaveBrowser.Address = url;
             }
             else
             {
-                _browser.Address = _host;
+                BrowserManager.SlaveBrowser.Address = _host;
             }
             WindowStartupLocation = WindowStartupLocation.Manual;
             Position = new PixelPoint();
@@ -123,7 +132,7 @@ namespace fis
                     targetMethodName = TargetMethodName.OpenReportEditPage;
                 }
             }
-            BrowserManager.ExecuteJS(targetMethodName, arguments, false);
+            BrowserManager.SlaveBrowser.ExcuteJS(targetMethodName, arguments);
         }
 
         private void SlaveWindow_Closing(object? sender, System.ComponentModel.CancelEventArgs e)

+ 16 - 18
fis/Utilities/FisBrowserScriptObject.cs

@@ -18,18 +18,22 @@ using System.Threading;
 
 namespace fis.Utilities
 {
-    internal class FisBrowserScriptObject
+    public class FisBrowserScriptObject
     {
         private string _platformName;
-        private TextBlock _title;
         private string _lastClipData;
         private readonly SliceHelper _sliceHelper;
         public event EventHandler<bool> MeasureStateChanged;
         private readonly IUltra3DManager _ultr3DManager;
         private object _adjustlock = new object();
-        internal FisBrowserScriptObject(TextBlock title, string platformName)
+
+        /// <summary>
+        /// 标题改变事件
+        /// </summary>
+        public event EventHandler<string>? OnTitleChange;
+
+        internal FisBrowserScriptObject( string platformName)
         {
-            _title = title;
             _platformName = platformName;
              _ultr3DManager = AppManager.Get<IUltra3DManager>();
             _sliceHelper = _ultr3DManager.Parse3DModelManager.SliceHelper;
@@ -63,7 +67,7 @@ namespace fis.Utilities
             args.Add(name);
             args.Add(useObject);
             args.Add(templateJson);
-            BrowserManager.ExecuteJS( TargetMethodName.SaveReportTemplate, args);
+            BrowserManager.MainBrowser.ExcuteJS( TargetMethodName.SaveReportTemplate, args);
         }
 
         /// <summary>
@@ -72,7 +76,7 @@ namespace fis.Utilities
         /// <param name="windowName"></param>
         public void BeginWindowDrag(string windowName) 
         {
-            BrowserManager.BeginWindowDrag(windowName);
+            BrowserManager.MainBrowser.BeginWindowDrag(windowName);
         }
 
         /// <summary>
@@ -81,7 +85,7 @@ namespace fis.Utilities
         /// <param name="windowName"></param>
         public void EndWindowDrag(string windowName)
         {
-            BrowserManager.EndWindowDrag(windowName);
+            BrowserManager.MainBrowser.EndWindowDrag(windowName);
         }
 
         /// <summary>
@@ -90,7 +94,7 @@ namespace fis.Utilities
         /// <param name="windowName"></param>
         public void MinimizeWindow(string windowName)
         {
-            BrowserManager.MinimizeWindow(windowName);
+            BrowserManager.MainBrowser.MinimizeWindow(windowName);
         }
 
         /// <summary>
@@ -99,7 +103,7 @@ namespace fis.Utilities
         /// <param name="windowName"></param>
         public void MaximizeWindow(string windowName)
         {
-            BrowserManager.MaximizeWindow(windowName);
+            BrowserManager.MainBrowser.MaximizeWindow(windowName);
         }
 
 
@@ -109,7 +113,7 @@ namespace fis.Utilities
         /// <param name="windowName"></param>
         public void CloseWindow(string windowName)
         {
-            BrowserManager.CloseWindow(windowName);
+            BrowserManager.MainBrowser.CloseWindow(windowName);
         }
 
         /// <summary>
@@ -372,13 +376,7 @@ namespace fis.Utilities
         /// <param name="title">标题</param>
         public void SetTitle(string title)
         {
-            MainWindow.MainThreadSyncContext?.Send(new SendOrPostCallback((args) =>
-            {
-                if (_title != null)
-                {
-                    _title.Text = title;
-                }
-            }), this);
+            OnTitleChange?.Invoke(this, title);
         }
 
         public void CloseSlaveWindow(int WindowType = 0)
@@ -395,7 +393,7 @@ namespace fis.Utilities
         public void RefershReports() 
         {
             CloseSlaveWindow();
-            BrowserManager.ExecuteJS(TargetMethodName.RefershReports, new List<string>());
+            BrowserManager.MainBrowser.ExcuteJS(TargetMethodName.RefershReports, new List<string>());
         }
 
         public int Age { get; set; }

+ 2 - 2
fis/Win/WinService.cs

@@ -68,9 +68,9 @@ namespace fis.Win
             var state = (int)WindowState.Normal;
             await Dispatcher.UIThread.InvokeAsync(() =>
             {
-                if (windowName == AppManager.ParentWindow.WindowName)
+                if (windowName == AppManager.MainWindow.WindowName)
                 {
-                    state = (int)AppManager.ParentWindow.WindowState;
+                    state = (int)AppManager.MainWindow.WindowState;
                 }
             });
             return state;