Posted at

WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる その5


はじめに

ローカルサイトを表示する上で下記3つのメソッドを使用してみました。


  • Loadメソッド

  • LoadHtmlメソッド

  • LoadStringメソッド


前記事


Loadメソッド


HelloWorld.html

<html>

<head>
<meta charset='utf-8' />
<title>Hello World</title>
</head>
<body>
<h1>Hello World!!</h1>
</body>
</html>

作成したHTMLを選択し、プロパティで「常にコピーする」に変更します。

_webBrowser.Load(Application.StartupPath + "\HelloWorld.html")

参照:4.CefSharpを使って、ローカルで動くWebアプリケーションを作る。


LoadHtmlメソッド

第2引数のUrlは、指定がない場合はダミーのURLを指定します。

Dim sb As New StringBuilder()

sb.AppendLine("<html>")
sb.AppendLine("<head>")
sb.AppendLine("<meta charset ='utf-8' />")
sb.AppendLine("<title>Hello World</title>")
sb.AppendLine("</head>")
sb.AppendLine("<body>")
sb.AppendLine("<h1>Hello World!!</h1>")
sb.AppendLine("</body>")
sb.AppendLine("</html>")
_webBrowser.LoadHtml(sb.ToString(), "http://example/")


LoadStringメソッド

第2引数のUrlは、指定がない場合はダミーのURLを指定します。

参照:CefSharp LoadHtml - stackoverflow

Dim sb As New StringBuilder()

sb.AppendLine("<html>")
sb.AppendLine("<head>")
sb.AppendLine("<meta charset ='utf-8' />")
sb.AppendLine("<title>Hello World</title>")
sb.AppendLine("</head>")
sb.AppendLine("<body>")
sb.AppendLine("<h1>Hello World!!</h1>")
sb.AppendLine("</body>")
sb.AppendLine("</html>")
_webBrowser.LoadHtml(sb.ToString(), "about:")


問題点

ネット接続が出来ない場合にエラーページを表示したいと思って、LoadStringメソッドでHTMLの文字列を指定するも真っ白なページのまま表示が出来ないという現象がありました。


調査

接続チェックを先にしており、接続出来ない場合はChromiumWebBrowserコンストラクタのURLに空白で指定していました。

_webBrowser = New ChromiumWebBrowser("")

Private Sub ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click
Dim str As String
str = "<HTML><BODY>Hello Wolrd!</BODY></HTML>"
_webBrowser.LoadString(str, "about:")
End Sub

しかし、ChromiumWebBrowserコンストラクタのURLを空白ではないアドレスを指定するとHello Wolrd!が表示されるようになります。

_webBrowser = New ChromiumWebBrowser("https://www.google.co.jp/")

また、次のようなURL「dummy:」を指定してもHello Wolrd!が表示されるようになりますが、その場合にエラー「ERR_UNKNOWN_URL_SCHEME」になるのでエラーイベントで無視するようにします。

参照:LoadString() ignoring string_value?

_webBrowser = New ChromiumWebBrowser("dummy:")

AddHandler _webBrowser.LoadError, AddressOf OnLoadError

Private Sub OnLoadError(sender As Object, e As LoadErrorEventArgs)
If e.FailedUrl = "dummy:" Then Return
End Sub


最後に

ネット接続が出来ない場合にLoadStringメソッドを使用してエラーページを表示しようとするも真っ白のまま、調べている時間がなく仕方なくエラーページをキャプチャーして画像で表示するというトリッキーな方法でリリースしてしまいました。

その反省を込めて今回調べました。LoadHtmlメソッドがあることに気がつけば良かったな。また改修することがあれば、その時にこの部分も修正してリリースするようにします。