我正在一个项目上,我需要对Revit插件使用CefSharp。 我可以使用CefSharp v65完成任务,并使用带有本地html,css和js文件的v67尝试相同的操作。
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 version 57,因此我需要在57版上进行相同的工作,并且由于某些原因,它不能按预期的方式运行。 / p>
更新
由于存在一些编译时错误,因此进行了以下更改 线
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文件 如何在CefSharp的57版中实现此目的。
请帮助
谢谢