はじめに
ローカルサイトを表示する上で下記3つのメソッドを使用してみました。
- Loadメソッド
- LoadHtmlメソッド
- LoadStringメソッド
前記事
- WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる
- WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる その2
- WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる その3
- WinFormsでChromiumブラウザコンポーネント(CefSharp)を使ってみる その4
Loadメソッド
<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.LoadString(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メソッドがあることに気がつけば良かったな。また改修することがあれば、その時にこの部分も修正してリリースするようにします。