Может ли кто-нибудь объяснить мне, как работает функция CefSharp LoadHtml
?
LoadHtml(string html, string url)
Что представляют параметры html
и url
?
Мне интересно загрузить страницу из необработанной строки HTML в браузер CefSharp.
Может ли кто-нибудь объяснить мне, как работает функция CefSharp LoadHtml
?
LoadHtml(string html, string url)
Что представляют параметры html
и url
?
Мне интересно загрузить страницу из необработанной строки HTML в браузер CefSharp.
Обновление: в CefSharp появился новый метод
LoadHtml(string html)
, который загружает HTML как URI данных в кодировке base64. Более надежным является методLoadHtml(string html, string url)
, описанный ниже.
В LoadHtml(string html, string url)
:
html
- ваша HTML-строка, например "<html><body>Hello world</body></html>"
. На самом деле, вы даже можете поместить в строку другое содержимое, например разметку SVG, если Chromium сможет это понять.
url
необходим, потому что ваш HTML-код может содержать JavaScript, который пытается выполнять вызовы AJAX, и веб-браузер должен понимать, какие ограничения безопасности применяются. Схема (например, "http:", "about:") и домен (например, "localhost", "google.com") влияют на поведение, такое как нажатие на ссылки, запросы AJAX, фреймы и т.д.
Если вы хотите просто визуализировать статический HTML, сделайте url
чем-то уникальным, например http://rendering/
(чтобы обработчик ресурсов не перекрывался с реальным url
в Интернете). Если вам нужно загрузить HTML, а затем взаимодействовать с ним или выполнять вызовы AJAX, выберите url
, который соответствует домену, с которым вы хотите взаимодействовать - например, если вы хотите создать альтернативную домашнюю страницу Google и выполнять поисковые запросы AJAX, вы захотите использовать https://www.google.com/
в качестве своего URL, чтобы вы могли общаться с ним.
Вы можете увидеть исходный код для LoadHtml
здесь.
Что CefSharp делает:
url
.Load(url)
и сообщите Chromium загрузить данный url
.Затем под капотом:
url
.html
.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; сборка = CefSharp.Wpf"
Добавьте элемент ChromiumWebBrowser в ваше окно.
<cef:ChromiumWebBrowser x:Name="browser" IsBrowserInitializedChanged="browser_IsBrowserInitializedChanged"></cef:ChromiumWebBrowser>
Не забудьте присвоить имя элементу (в этом случае элемент называется браузером). Мы будем использовать его для вызова метода LoadHtml позже.
Создайте обработчик событий для события IsBrowserInitializedChanged. Это важно, потому что это событие будет запущено, как только элемент ChromiumWebBrowser будет готов. Затем мы можем загрузить html.
Объединяя все это вместе...
<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>
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/");
}
}
}