CefSharp LoadHtml

может кто-нибудь объяснить мне, как CefSharp LoadHtml функция работает?

LoadHtml(string html, string url)

что делать html и url параметры представляют?

меня интересует загрузка страницы из необработанной строки HTML в браузер CefSharp.

3 ответов


html - Это ваша строка HTML, например "<html><body>Hello world</body></html>". На самом деле, вы даже можете поместить другой контент в строку, например разметку SVG, пока Chromium может ее понять.

url необходимо, потому что ваш HTML-код может содержать JavaScript, который пытается выполнять вызовы AJAX, и веб-браузер должен понимать, какие ограничения безопасности применяются. Схема (например, "http:", "о:") и домен (например, "localhost", "google.com") влияет на поведение, такое как нажатие на ссылки, AJAX запросы, iframes и т. д.

если вы хотите просто отобразить статический HTML, сделайте url что-то уникальное, таких как http://rendering/ (чтобы обработчик ресурсов не перекрывался с реальным url в интернете). Если вам нужно загрузить HTML, а затем взаимодействовать с ним или выполнять вызовы AJAX, выберите url который соответствует домену, с которым вы хотите взаимодействовать - например, если вы хотите сделать альтернативную домашнюю страницу Google и выполнить поисковые запросы AJAX, вы захотите использовать https://www.google.com/ as Ваш URL, чтобы вы могли общаться с ним.


вы можете увидеть исходный код LoadHtml здесь.

что делает CefSharp:

  1. зарегистрировать обработчик ресурсов для данного url.
  2. вызов Load(url) чтобы сказать Chromium загрузить данный url.

затем, под капотом:

  1. Chromium запрашивает url.
  2. обработчик ресурсов перехватывает запрос, и возвращает ваш html.
  3. хром делает ваши html вместо реального содержимого URL-адреса.

попробуйте следующий код

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

надеюсь, что это помогает.


для проекта WPF выполните следующие действия.

создайте ссылку на пространство имен CefSharp.Wpf в xaml.

xmlns:cef="CLR-пространство имен: CefSharp.WPF; assembly=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/");
        }
    }
}