Я работаю над проектом, в котором мне нужно использовать 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.
Пожалуйста, помогите
Спасибо