C# WebBrowserコンポーネントのサンプル
概要
フォームにWebBrowserコンポーネントを配置し、JavaScriptとNativeの連携をしたり、Nativeから任意のURLへ画面遷移させたり。
詳細
配置するコンポーネントはこれですね。
以下のソースコードは
- JavaScriptによるエラー警告を出さない
- JavaScriptからNativeの連携するためのクラスは、JavaScriptクラス(後述)
- http://cheatsheet.hatenablog.com へ画面遷移
- NativeからJavaScriptの機能を呼び出す
を指示しています。
webBrowser1.ScriptErrorsSuppressed = true; webBrowser1.ObjectForScripting = new JavaScript(webBrowser1); webBrowser1.Navigate(new Uri("http://cheatsheet.hatenablog.com")); object[] args = { "arg1" }; webBrowser1.Document.InvokeScript("JSfunc1", args);
JavaScript.cs
namespace WindowsFormsApplication1 { [System.Runtime.InteropServices.ComVisibleAttribute(true)] public class JavaScript { private System.Windows.Forms.WebBrowser WebBrowser { get; set; } public JavaScript(System.Windows.Forms.WebBrowser dstWebBrowser) { this.WebBrowser = dstWebBrowser; } // JavaScriptから呼ばれるネイティブのメソッド public void CSfunc1(string value) { MessageBox.Show("CSfunc1: " + value); } } }
HTML(JavaScript含む)
<html> <head> <meta charset="UTF-8"> <script> function JSfunc1(arg) { alert('JSfunc1! : ' + arg); } var jsdata1 = 'jsdata1'; function clk() { window.external.CSfunc1(jsdata1); } </script> </head> <body> <input type='button' value='JavaScript To Native' onClick='clk()'> </body> </html>
まとめ
あまりおすすめしません。特に、キャッシュ周りとか、確実にはまります。 レンダリングエンジンとかJavaScriptエンジンは、最新なふりはしてくれるのですが、それと同じバージョンのInternet Explorerでの挙動と違う部分があり、それが乗り越えられない部分があります。
間違ってもハイブリッド・アプリ的な考え方で使おうとは思わない方が良いですよ。