如何在Revit 2019的CefSharp v57中使用本地html文件

时间:2019-02-18 15:13:21

标签: c#-4.0 cefsharp revit

我正在一个项目上,我需要对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版中实现此目的。

请帮助

谢谢

0 个答案:

没有答案