public Control_CustomBrowserPresenter(WebViewHost wvh)
        {
            InitializeComponent();
            WVHost = wvh;
            browsersGrid.Children.Add(WVHost);
            WVHost.View.AddressChanged += (s, e) =>
            {
                if (!EnableWorkLogs)
                {
                    return;
                }
                textBox_Url.Text = e.Url.ToString();
                WriteLineToConsole("Navigate to " + e.Url.ToString());
            };
            WVHost.View.ConsoleMessage += (s, e) =>
            {
                if (!EnableWorkLogs)
                {
                    return;
                }
                WriteLineToConsole(e.Message);
            };

            defaultMarginForBrowser = browsersGrid.Margin;
            IsConsoleVisible        = false;
        }
Пример #2
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            m_webViewHost = new WebViewHost();
            string file = GetArgOrDefault(e.Args, 0);

            (new MainWindow(file, m_webViewHost)).Show();
        }
Пример #3
0
        public EditorWebViewTabItem(Data data, WebViewHost webViewHost, PartModel model)
        {
            Data        = data ?? throw new ArgumentNullException(nameof(data));
            WebViewHost = webViewHost ?? throw new ArgumentNullException(nameof(webViewHost));
            PartModel   = model ?? throw new ArgumentNullException(nameof(model));

            InitializeComponent();
            Browser.EnsureCoreWebView2Async(WebViewHost.Environment);
            UpdatePartView();
        }
        public Tuple <TabItem, Control_CustomBrowserPresenter> AddNewWebViewHost(WebViewHost webViewHost)
        {
            TabItem ti = new TabItem();
            //ti.Content = webViewHost;
            var customBrowserPresenter = new Control_CustomBrowserPresenter(webViewHost);

            ti.Content = customBrowserPresenter;
            ti.Header  = "br" + itemNum.ToString();
            itemNum++;
            browsersTabControl.Items.Add(ti);
            browsersTabControl.SelectedItem = ti;
            browsersCount++;
            return(new Tuple <TabItem, Control_CustomBrowserPresenter>(ti, customBrowserPresenter));
        }
Пример #5
0
 public void Free()
 {
     if (IsFree)
     {
         return;
     }
     IsFree     = true;
     WriteToLog = delegate { };
     Invoker(() =>
     {
         if (BrowsersTabItem != null)
         {
             WindowedBrowsersPresenter.RemoveTabItem(BrowsersTabItem);
         }
         BrowsersTabItem           = null;
         WindowedBrowsersPresenter = null;
         WebView?.Dispose();
         WebView = null;
         WebViewHost?.Dispose();
         WebViewHost = null;
         //Приостанавливает текущий поток до того как все WebView, использующие сессию завершатся, с таймаутом в 10 сек.
         SynchronizationHelper.WaitFor(() =>
         {
             bool stillWait = true;
             Invoker(() => { stillWait = WebSession.HasViews; });
             return(stillWait);
         }, 15000);
         if (!WebSession.HasViews)
         {
             WebSession.Dispose();
         }
         WebSession = null;
         WebCore.ReleaseMemory();
     });
     //Invoker = null;
     GC.Collect();
 }
Пример #6
0
        public MainWindow(string file, WebViewHost webViewHost)
        {
            InitializeComponent();

            UpdateListViewAndMenus(ListViewState.Default);
            IconManager = new IconManager();

            Unloaded   += MainWindow_Unloaded;
            WebViewHost = webViewHost ?? throw new ArgumentNullException(nameof(webViewHost));
            Data        = new Data();
            DataContext = Data;

            Data.Settings.EditorReadOnlyModeChanged += Data_EditorReadOnlyModeChanged;
            Data.Settings.EditorDarkModeChanged     += Data_EditorDarkModeChanged;

#if DEBUG
            menuMain.Items.Add(FindResource("debugMenu"));
#endif

            if (file != null)
            {
                OpenPackage(file);
            }
        }
Пример #7
0
        /// <summary>
        /// Меняйте настройки WebView здесь.
        /// if you send null value, the proxy or cache will be established by default.
        /// Если выберете оконный режим - автоматически при создании браузера открывается новое окно с ним.
        /// </summary>
        IWebViewAndAnother CreateWebViewAndAnother(bool isWindowed, string proxyConfigs, string cachePath)
        {
            WebViewType viewType;

            if (isWindowed)
            {
                viewType = WebViewType.Window;
            }
            else
            {
                viewType = WebViewType.Offscreen;
            }

            /*
             * Вот что важного я понял:
             * - нельзя изменить сессию;
             * - нельзя изменить IntPtr контрола, где происходит рендеринг. Upd: в wpf вместо него вообще используется WebViewHost;
             * - нельзя изменить тип отображения ViewType;
             * - можно отключить рендеринг;
             * - можно изменить размер;
             * - можно задать при создании, но нельзя поменять путь к кешу и прокси.
             */

            WebViewAndAnother res = new WebViewAndAnother();
            WebView           wv  = null;

            InvokeToWebcoreThread(() =>
            {
                WebPreferences webPreferences = new WebPreferences();
                //Настройки с отключенной безопасностью, используйте для тестов.
                //webPreferences.WebSecurity = false;
                //webPreferences.CanScriptsAccessClipboard = true;
                //webPreferences.Databases = true;
                //webPreferences.FileAccessFromFileURL = true;
                //webPreferences.JavascriptViewExecute = true;
                //webPreferences.UniversalAccessFromFileURL = true;
                //webPreferences.WebGL = true;

                if (proxyConfigs != null)
                {
                    webPreferences.ProxyConfig = proxyConfigs;
                }
                WebSession ws;
                if (cachePath == null)
                {
                    ws = WebCore.CreateWebSession(webPreferences);
                }
                else
                {
                    ws = WebCore.CreateWebSession(cachePath, webPreferences);
                }
                wv = WebCore.CreateWebView(1000, 1000, ws, viewType);


                //Уже не используется.
                //AddConsoleListener(wv);

                res.WebSession = ws;
                if (viewType == WebViewType.Window)
                {
                    if (EveryTabInOwnWindow || WindowedBrowsersPresenter == null || WindowedBrowsersPresenter.IsClosed)
                    {
                        WindowedBrowsersPresenter = new Window_CustomBrowsersPresenter();
                    }
                    Window_CustomBrowsersPresenter wbPresenter = WindowedBrowsersPresenter;
                    WebViewHost wwh               = new WebViewHost();
                    wwh.View                      = wv;
                    var tuple                     = wbPresenter.AddNewWebViewHost(wwh);
                    TabItem currentTabItem        = tuple.Item1;
                    res.WebViewHost               = wwh;
                    res.WindowedBrowsersPresenter = wbPresenter;
                    res.BrowsersTabItem           = currentTabItem;
                    res.WriteToLog                = tuple.Item2.WriteLineToLogs;
                }
                else
                {
                    //if offscreen
                }
            });

            res.WebView = wv;
            res.Invoker = InvokeToWebcoreThread;
            //res.Invoker = (act) => {
            //    InvokeToWebcoreThread(act, wv);
            //};
            return(res);
        }
Пример #8
0
 private void oAuthAuthorizeLink_Click_1(object sender, RoutedEventArgs e)
 {
     WebViewHost.Visibility = Windows.UI.Xaml.Visibility.Visible;
     WebViewHost.Navigate(new Uri(oAuthAuthorizeLink.Content.ToString()));
 }