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; }
private void Application_Startup(object sender, StartupEventArgs e) { m_webViewHost = new WebViewHost(); string file = GetArgOrDefault(e.Args, 0); (new MainWindow(file, m_webViewHost)).Show(); }
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)); }
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(); }
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); } }
/// <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); }
private void oAuthAuthorizeLink_Click_1(object sender, RoutedEventArgs e) { WebViewHost.Visibility = Windows.UI.Xaml.Visibility.Visible; WebViewHost.Navigate(new Uri(oAuthAuthorizeLink.Content.ToString())); }