public InstallNewScript(SessionInfo session, string Url)
 {
     this.session = session;
     url          = Url;
     loaded       = false;
     InitializeComponent();
     Task.Run(async() =>
     {
         button1.Text = "安装引用";
         code.Text    = "正在下载脚本代码\n\n加载完成后您可以编辑代码并保存,脚本加载时将从您的硬盘加载。\n如果您直接点击安装,脚本将在每次被使用时从网络加载。";
         code.Text    = ScriptFetchEngine.GetScriptContent(Url);
         loaded       = true;
         button1.Text = "安装";
     });
 }
        public BrowserWindow(Data.SessionInfo session, bool keepDebugWindow = false)
        {
            GM = new GMApi.GM_API_Handler(session.UUID, this);
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            this.Text = session.SessionName + " - " + Properties.Settings.Default.Title;
            webBro    = new ChromiumWebBrowser();

            logger.AppendText("脚本加载器任务:准备脚本数据\n\n正在预加载脚本...\n");

            webBro.RequestContext = Data.CM.GetContext(session.UUID).context;
            browserLayoutPanel.Controls.Add(webBro);
            webBro.Dock            = DockStyle.Fill;
            webBro.LifeSpanHandler = new Common.Control.CefSharpOpenPageSelf();
            webBro.AddressChanged += onAddrChange;
            webBro.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
            webBro.JavascriptObjectRepository.Register("GM", GM, false);

            this.session = session;
            sUUID        = session.UUID;
            Task t = Task.Run(async() =>
            {
                List <string> Uscripts = Data.VDB.GetSessionRelatedScripts(session.UUID);
                scripts.Clear();
                int cnt = 0;
                foreach (string urlstr in Uscripts)
                {
                    if (urlstr.Length < 1)
                    {
                        continue;
                    }
                    try
                    {
                        logger.AppendText("加载:" + urlstr + "\n");
                        if (this.IsDisposed)
                        {
                            return;
                        }
                        UserScript script = null;
                        Uri url           = new Uri(urlstr);
                        if (url.Scheme == "localscript")
                        {
                            script = new LocalUserScriptHandler(session).GetLocalUserScript(url.Host);
                        }
                        else if (url.Scheme == "globalscript")
                        {
                            script = LocalUserScriptHandler.GetUserScript(url.Host);
                        }
                        else
                        {
                            var code = Data.ScriptFetchEngine.GetScriptContent(urlstr, session);
                            script   = new UserScript(code);
                        }
                        if (script == null ||
                            script.conf.Name == null ||
                            script.conf.Name == "")
                        {
                            continue;
                        }
                        logger.AppendText("正在准备预定义资源...\n");
                        foreach (KeyValuePair <string, string> kvp in script.conf.Resources)
                        {
                            if (this.IsDisposed)
                            {
                                return;
                            }
                            logger.AppendText("[" + kvp.Key + "]\t" + kvp.Value + " \t");
                            try
                            {
                                GM.storage.preLoadResources.Add(kvp.Key, new GMApi.StorageSystem.Resource()
                                {
                                    content = ScriptFetchEngine.GetScriptContent(kvp.Value),
                                    url     = kvp.Value
                                });
                                logger.AppendText("Done. Len=" +
                                                  GM.storage.preLoadResources[kvp.Key].content.Length
                                                  + "\n");
                            }
                            catch
                            {
                                GM.storage.preLoadResources.Add(kvp.Key, new GMApi.StorageSystem.Resource()
                                {
                                    content = "",
                                    url     = kvp.Value
                                });
                                logger.AppendText("Fail.\n");
                            }
                        }
                        scripts.Add(script);
                        logger.AppendText("当前脚本完成。\n\n");
                        cnt++;
                        this.Text = session.SessionName + "(Script*" + cnt + ") - " + Properties.Settings.Default.Title;
                    }
                    catch (Exception err)
                    {
                        logger.AppendText("脚本加载出现问题:" + err.Message + "\n调用栈:\n");
                        logger.AppendText(err.StackTrace + "\n");
                    }
                }
                if (this.IsDisposed)
                {
                    return;
                }
                logger.AppendText("预加载完成,开始载入网页。\n");
                await Task.Delay(1000);
                if (this.IsDisposed)
                {
                    return;
                }
                if (!keepDebugWindow)
                {
                    logger.Hide();
                }
                webBro.FrameLoadEnd += onFrameLoadEnd;
                webBro.Load(session.Url);
            });
        }