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;
 }
Ejemplo n.º 3
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);
        }
 public void WriteToLog(string text)
 {
     WebViewAndAnother?.WriteToLog(text);
 }