Как работать с локальными HTML-файлами в CefSharp v57 для Revit 2019 - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю над проектом, в котором мне нужно использовать CefSharp для плагина Revit.Я мог выполнить задачу с CefSharp v65 и попробовал то же самое с v67 с локальными файлами html, css и js.

public static string rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace("testapp.dll\\", "");

public MainView()
{
    this.chromeBrowser = new ChromiumWebBrowser(string.Format(@"{0}\ui\test.html", MainView.rootPath));
        this.Controls.Add(this.chromeBrowser);
    if (!Cef.IsInitialized)
    {
        CefSettings settings = new CefSettings();
        settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache");
        settings.BrowserSubprocessPath = Path.Combine(MainView.rootPath, "CefSharp.BrowserSubprocess.exe");
        settings.LocalesDirPath = Path.Combine(MainView.rootPath, "locales");
        settings.ResourcesDirPath = Path.Combine(MainView.rootPath);
        Cef.EnableHighDPISupport();
        CefSharpSettings.LegacyJavascriptBindingEnabled = true;
        Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);
    }
}

Загрузка формы

    private void MainView_Load(object sender, EventArgs e)
    {
        CefSharpSettings.LegacyJavascriptBindingEnabled = true;
        string page = string.Format(@"{0}\ui\test.html", MainView.rootPath);
        string downloadpg = System.Net.WebClient().DownloadString(string.Format(page, MainView.rootPath));
        this.chromeBrowser.LoadHtml(string.Format(page, MainView.rootPath), page);
        this.chromeBrowser.FrameLoadEnd += OnFrameLoadEnd;
    }

    public void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs e)
    {
        string pathJS = string.Format(@"{0}\ui\js\app.js", MainView.rootPath);
        if (File.Exists(pathJS))
        {
            string script = File.ReadAllText(pathJS);
            if (e.Frame.IsMain)
            {
                chromeBrowser.ExecuteScriptAsync(script);
            }
        }
    }

Приведенный выше код работает отлично, как и ожидалосьс версиями 65 и 67, но поскольку Revit 2019 использует CefSharp версии 57 , следовательно, мне нужно сделать то же самое на версии 57, и по некоторым причинам это не работает должным образом.

Обновление

Следующие изменения были внесены, поскольку произошли некоторые ошибки времени компиляции. Строка

CefSharpSettings.LegacyJavascriptBindingEnabled = true; 

была удалена.Это изменение было скомпилировано, но в следующем месте произошла ошибка времени выполнения.

public void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs e)
    {
        string pathJS = string.Format(@"{0}\ui\js\app.js", Form1.rootPath);
        if (File.Exists(pathJS))
        {
            string script = File.ReadAllText(pathJS);
            if (e.Frame.IsMain)
            {
                chromeBrowser.ExecuteScriptAsync(script);// The error occurred here
            }
        }
    }

Исключение говорит, что в настоящее время невозможно выполнить javascript, сценарии могут выполняться только в пределах V8Context. Использование свойства IWebBrowser.CanExecuteJavascriptInMainFrameдля защиты от этого исключения.

Метод loadHtml не отображает локальные HTML-файлы на экране. Как заставить это работать в версии 57 CefSharp.

Пожалуйста, помогите

Спасибо

...