void InvokeToWebCoreThread(Action method) { if (IsFree) { return; } WebViewAndAnother.Invoker(method); }
public void Free() { if (IsFree) { return; } IsFree = true; WebViewUpdateTask?.Wait(); WebViewUpdateTask = null; WebViewAndAnother?.Free(); WebViewAndAnother = null; }
/// <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); }
public void WriteToLog(string text) { WebViewAndAnother?.WriteToLog(text); }