使用CefSharp v65加载本地html/css/js文件

4
我正在尝试使用CefSharp v65在WinForms中加载本地的html/css/js文件。
我发现其他Stack Overflow文章也提到了这个问题,但是他们没有使用内置版本的FolderSchemeHandlerFactory,而是实现了自己的版本。下面是我阅读的方案处理器文档:https://github.com/cefsharp/CefSharp/wiki/General-Usage,其中包括“Scheme Handler”标题。
参考资料:Working with locally built web page in CefSharp 我尝试像这样使用新功能:
    public ChromiumWebBrowser browser;

    public void InitBrowser()
    {            
        var settings = new CefSettings();
        settings.RegisterScheme(new CefCustomScheme
        {
            SchemeName = "localfolder",
            SchemeHandlerFactory = new FolderSchemeHandlerFactory(
                rootFolder: @"..\..\..\..\CEFSharpExample\webpage",
                defaultPage: "index.html" // default
            )
        });

        Cef.Initialize(settings);

        string html = File.ReadAllText(@"..\..\..\webpage\index.html");
        browser = new ChromiumWebBrowser();
        browser.LoadHtml(html);
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;

    }

然而,我只是得到了没有css的html,调试器中也没有异常。有人知道如何利用新的内置功能吗?


1
假设您正在使用WinForms,请删除对LoadHtml的调用,并将起始URL传递到ChromiumWebBrowser构造函数中,类似于localfolder://anydomain.example/。 - amaitland
使用单个参数的LoadHtml可以加载数据URI https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs - amaitland
@amaitland,这个方法起作用了!你能解释一下为什么吗?(对我和将来查看这个的任何人来说) - Kelly Flet
你的请求没有被发送到方案处理程序,因为你正在加载数据URI。 - amaitland
如果您有时间,请将更新后的代码发布为答案。 - amaitland
1个回答

12

正如评论中amaitland所指出的,我的“请求没有发送到方案处理程序,因为我正在加载数据URI”。

更新后的工作代码如下(稍微详细一些,以防您想知道一切发生的地方):

public partial class Form1 : Form
{
    InitializeComponent();
    InitBrowser();
}

public ChromiumWebBrowser browser;

public void InitBrowser()
{
    var settings = new CefSettings();

    settings.RegisterScheme(new CefCustomScheme
    {
        SchemeName = "localfolder",
        DomainName = "cefsharp",
        SchemeHandlerFactory = new FolderSchemeHandlerFactory(
            rootFolder: @"C:\CEFSharpExample\webpage",
            hostName: "cefsharp",
            defaultPage: "index.html" // will default to index.html
        )
    });

    Cef.Initialize(settings);

    browser = new ChromiumWebBrowser("localfolder://cefsharp/");

    this.Controls.Add(browser);
    browser.Dock = DockStyle.Fill;   
}

能否使用位于资源文件夹中的单个HTML文件来完成这个任务? - A.bakker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接