18

有人可以向我解释 CefSharpLoadHtml功能是如何工作的吗?

LoadHtml(string html, string url)

htmlurl参数代表什么?

我有兴趣将原始 HTML 字符串中的页面加载到 CefSharp 浏览器中。

4

3 回答 3

41

更新:CefSharp 有一个新LoadHtml(string html)方法,可以将 HTML 作为 base64 编码的数据 URI 加载。LoadHtml(string html, string url)比下面描述的方法更可靠。

LoadHtml(string html, string url)

html是您的 HTML 字符串,例如"<html><body>Hello world</body></html>". 实际上,你甚至可以在字符串中放入其他内容,例如 SVG 标记,只要 Chromium 能够理解。

url是必需的,因为您的 HTML 代码可能包含尝试执行 AJAX 调用的 JavaScript,并且 Web 浏览器需要了解适用的安全限制。方案(例如“http:”、“about:”)和域(例如“localhost”、“google.com”)会影响点击链接、AJAX 请求、iframe 等行为。

如果您想简单地呈现静态 HTML,请制作url独特的内容,例如http://rendering/(以便资源处理程序不会与urlWeb 上的真实内容重叠)。如果您需要加载 HTML,然后与之交互或执行 AJAX 调用,请选择url与您要与之交互的域匹配的域 - 例如,如果您想创建一个替代的 Google 主页并执行 AJAX 搜索查询,您将想https://www.google.com/用作您的 URL,以便您可以与之通信。


您可以在此处查看源代码LoadHtml

CefSharp 所做的是:

  1. 为给定的 注册资源处理程序url
  2. 调用Load(url)告诉 Chromium 加载给定的url.

然后,在引擎盖下:

  1. Chromium 请求url.
  2. 资源处理程序拦截请求,并返回您的html.
  3. Chromium 呈现您的html而不是 URL 的真实内容。
于 2014-12-29T06:47:28.720 回答
6

试试下面的代码

Cef.Initialize(new CefSettings());

ChromiumWebBrowser browser = new ChromiumWebBrowser(string.Empty) {
    Location = new Point(0, 0),
    Dock = DockStyle.Fill
};

//add to a System.Windows.Forms.Form or some other container.
this.Controls.Add(browser);
//the url parameter does not have to be an existing address.
browser.LoadHtml("<html><head></head><body><h1>Hello, World!</h1></body></html>", "http://www.example.com/");

希望这可以帮助。

于 2015-02-20T13:09:39.423 回答
4

对于 WPF 项目,请尝试以下操作。

在 xaml 中创建对 CefSharp.Wpf 的命名空间引用。

xmlns:cef="clr-命名空间:CefSharp.Wpf;assembly=CefSharp.Wpf"

ChromiumWebBrowser元素添加到您的窗口。

<cef:ChromiumWebBrowser x:Name="browser" IsBrowserInitializedChanged="browser_IsBrowserInitializedChanged"></cef:ChromiumWebBrowser>

请记住为元素指定一个名称(在本例中,该元素称为browser)。稍后我们将使用它来调用LoadHtml方法。

为IsBrowserInitializedChanged事件创建事件处理程序。这很重要,因为一旦ChromiumWebBrowser控件准备就绪,就会触发此事件。然后我们可以加载html。

把它们放在一起...

主窗口.xaml

<Window x:Class="CEF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:CEF"
    xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <cef:ChromiumWebBrowser x:Name="browser" IsBrowserInitializedChanged="browser_IsBrowserInitializedChanged"></cef:ChromiumWebBrowser>
    </Grid>
</Window>

主窗口.xaml.cs

using System.Windows;

namespace CEF
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void browser_IsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            // the browser control is initialized, now load the html

            browser.LoadHtml("<html><head></head><body><h1>Hello, World!</h1></body></html>", "http://www.example.com/");
        }
    }
}
于 2016-07-05T04:42:07.493 回答