CefSharp LoadHtml

时间:2014-12-26 15:48:07

标签: c# chromium-embedded cefsharp

有人可以向我解释一下CefSharp LoadHtml功能是如何工作的吗?

LoadHtml(string html, string url)

htmlurl参数代表什么?

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

3 个答案:

答案 0 :(得分:31)

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

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

如果您想简单地呈现静态HTML,请使url具有唯一性,例如http://rendering/(以便资源处理程序不会与网络上的真实url重叠)。如果您需要加载HTML然后与其进行交互或执行AJAX调用,请选择与您要与之交互的域匹配的url - 例如,如果您要创建替代Google主页并执行AJAX搜索查询时,您需要使用https://www.google.com/作为您的网址,以便与其进行通信。


您可以看到source code for LoadHtml here

CefSharp的作用是:

  1. 为给定的url注册资源处理程序。
  2. 致电Load(url)告诉Chromium加载给定的url
  3. 然后,在引擎盖下:

    1. Chromium请求url
    2. 资源处理程序拦截请求,并返回html
    3. Chromium会呈现您的html,而不是网址的真实内容。

答案 1 :(得分: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/");

希望这有帮助。

答案 2 :(得分:3)

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

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

  

的xmlns:CEF = “CLR-名称空间:CefSharp.Wpf;装配= CefSharp.Wpf”

ChromiumWebBrowser 元素添加到您的窗口。

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

请记住为元素指定名称(在这种情况下,该元素称为浏览器)。稍后我们将使用它来调用 LoadHtml 方法。

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

全部放在一起......

MainWindow.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>

MainWindow.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/");
        }
    }
}