web-dev-qa-db-fra.com

CefSharp LoadHtml

Quelqu'un pourrait-il m'expliquer comment fonctionne la fonction CefSharp LoadHtml?

LoadHtml(string html, string url)

Que représentent les paramètres html et url?

Je souhaite charger une page à partir d'une chaîne HTML brute dans le navigateur CefSharp.

16
G-Man

Mise à jour: CefSharp a une nouvelle méthode LoadHtml(string html) qui charge le HTML comme URI de données encodées en base64. Il est plus fiable que la méthode LoadHtml(string html, string url) décrite ci-dessous.

Dans LoadHtml(string html, string url):

html est votre chaîne HTML, par exemple "<html><body>Hello world</body></html>". En fait, vous pouvez même mettre d'autres contenus dans la chaîne, tels que le balisage SVG, tant que Chromium peut le comprendre.

url est nécessaire car votre code HTML peut contenir du JavaScript qui tente d'exécuter AJAX appels, et le navigateur Web doit comprendre quelles restrictions de sécurité s'appliquent. Le schéma (par exemple "http: "," about: ") et le domaine (par exemple," localhost "," google.com ") affectent des comportements tels que cliquer sur des liens, AJAX requêtes, iframes, etc.

Si vous voulez simplement rendre du HTML statique, faites de url quelque chose d'unique tel que http://rendering/ (Afin que le gestionnaire de ressources ne chevauche pas un vrai url sur le web). Si vous devez charger le code HTML, puis interagir avec lui ou effectuer des appels AJAX, choisissez un url qui correspond au domaine avec lequel vous souhaitez interagir - par exemple, si vous le souhaitez pour créer une autre page d'accueil Google et effectuer des AJAX requêtes de recherche, vous voudrez utiliser https://www.google.com/ comme URL afin de pouvoir communiquer avec elle.


Vous pouvez voir le code source pour LoadHtml ici .

Ce que fait CefSharp, c'est:

  1. Enregistrez un gestionnaire de ressources pour le url donné.
  2. Appelez Load(url) pour dire à Chromium de charger le url donné.

Puis, sous le capot:

  1. Chrome demande le url.
  2. Le gestionnaire de ressources intercepte la demande et renvoie votre html.
  3. Chromium affiche votre html au lieu du contenu réel de l'URL.
33
Yoshi

Essayez le code suivant

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

J'espère que cela t'aides.

6
user2278642

Pour un projet WPF, essayez ce qui suit.

Créez une référence d'espace de noms à CefSharp.Wpf dans le xaml.

xmlns: cef = "espace de noms clr: CefSharp.Wpf; Assembly = CefSharp.Wpf"

Ajoutez l'élément ChromiumWebBrowser à votre fenêtre.

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

N'oubliez pas d'attribuer un nom à l'élément (dans ce cas, l'élément est appelé navigateur). Nous l'utiliserons pour appeler la méthode LoadHtml plus tard.

Créez un gestionnaire d'événements pour l'événement IsBrowserInitializedChanged. Ceci est important, car cet événement sera déclenché une fois que le contrôle ChromiumWebBrowser sera prêt. Puis pouvons-nous charger du HTML.

Mettre tous ensemble...

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