ドキュメント内でスクリプトを動かすだけならば、HTMLにスクリプトを埋め込む方法と同様です。
HtmlElement element = webBrowser.Document.CreateElement("p"); element.InnerHtml = "<button onclick='window.alert(\"OK\")'>Click</button>";
アプリケーションと連携するには、まずWebページとして動作しないように設定を修正します。
コード | 目的 |
---|---|
AllowWebBrowserDrop = false | WebBrowserへドロップされたファイルを開かないようにする。 |
IsWebBrowserContextMenuEnabled = false | コンテキストメニューを表示しないようにする。 |
WebBrowserShortcutsEnabled = false | ショートカットキーに応答しないようにする。
falseとするとWebBrowserへのキー入力は破棄され、キーによっては他のコントロールへも伝播しなくなります。 |
ドキュメント内のスクリプトから、C#のメソッドを呼び出す方法を考えます。
次のコードではフォームにwebBrowserが表示されているとして、そこに表示されたbutton要素をクリックしたときにFunc()が呼び出されるサンプルです。
[System.Runtime.InteropServices.ComVisible(true)] public class Form1 : Form { public Form1() { webBrowser.ObjectForScripting = this; webBrowser.DocumentText = "<BUTTON onclick=\"window.external.Func('ABC')\">Click</BUTTON>"; } public void Func(string message) { Console.Write(message); } }
呼び出すメソッドが定義されたクラスにはComVisible属性を設定し、そのオブジェクトをObjectForScriptingプロパティに設定します。そしてメソッドは、window.externalオブジェクトを介して呼び出します。WebBrowser.ObjectForScripting プロパティ (System.Windows.Forms) | MSDN
HtmlElement.AttachEventHandler()のハンドラにC#のメソッドを登録することで、それを呼び出せます。
C#からは、InvokeScript()によりドキュメント内のスクリプトを呼び出せます。
public object InvokeScript( string scriptName, object[] args )HtmlDocument.InvokeScript メソッド (String, Object[]) (System.Windows.Forms) | MSDN
webBrowser.DocumentCompleted += delegate { webBrowser.Document.InvokeScript("Func"); // NaN webBrowser.Document.InvokeScript("Func", new Object[] { 2, 3 }); // 5 webBrowser.Document.InvokeScript("Func", new Object[] { "A", 3 }); // A3 }; webBrowser.DocumentText = "<HTML><SCRIPT>function Func(a, b){window.alert(a + b);}</SCRIPT></HTML>";