LoginSignup
0
1

More than 3 years have passed since last update.

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

Posted at

はじめに

ローカルサイトを表示する上で下記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メソッドがあることに気がつけば良かったな。また改修することがあれば、その時にこの部分も修正してリリースするようにします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1