web-dev-qa-db-ja.com

CefSharp LoadHtml

CefSharp LoadHtml関数の仕組みを誰かに説明してもらえますか?

LoadHtml(string html, string url)

htmlおよびurlパラメータは何を表していますか?

生のHTML文字列からCefSharpブラウザーにページを読み込むことに興味があります。

16
G-Man

更新:CefSharpには、HTMLをbase64でエンコードされたデータURIとしてロードする新しいLoadHtml(string html)メソッドがあります。以下で説明するLoadHtml(string html, string url)メソッドよりも信頼性が高くなります。

LoadHtml(string html, string url)内:

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/_などの一意の名前にします(リソースハンドラがWeb上の実際のurlと重複しないようにします)。 HTMLをロードして対話する必要がある場合、またはAJAX呼び出しを実行する場合は、対話するドメインに一致するurlを選択します。たとえば、別のGoogleホームページを作成してAJAX検索クエリを実行するには、URLとして_https://www.google.com/_を使用して、通信できるようにします。


ここでLoadHtmlのソースコード を確認できます。

CefSharpの機能は次のとおりです。

  1. 指定されたurlのリソースハンドラーを登録します。
  2. Load(url)を呼び出して、指定されたurlをロードするようChromiumに指示します。

次に、内部で:

  1. Chromiumはurlをリクエストします。
  2. リソースハンドラーはリクエストをインターセプトし、htmlを返します。
  3. Chromiumは、URLの実際のコンテンツではなくhtmlをレンダリングします。
33
Yoshi

次のコードを試してください

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

お役に立てれば。

6
user2278642

WPFプロジェクトの場合は、以下を試してください。

XamlでCefSharp.Wpfへの名前空間参照を作成します。

xmlns:cef = "clr-namespace:CefSharp.Wpf; Assembly = CefSharp.Wpf"

ChromiumWebBrowser要素をウィンドウに追加します。

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

要素に名前を割り当てることを忘れないでください(この場合、要素はbrowserと呼ばれます)。後で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/");
        }
    }
}
3
user2278642