スクリプト (JScript)

ドキュメント内でスクリプトを動かすだけならば、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へのキー入力は破棄され、キーによっては他のコントロールへも伝播しなくなります。

方法 : DHTML コードとクライアント アプリケーション コード間の双方向の通信を実装する | MSDN

スクリプト → C#

ドキュメント内のスクリプトから、C#のメソッドを呼び出す方法を考えます。

HTMLで作成されたコンテンツ

次のコードではフォームに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

DOMで作成されたコンテンツ

HtmlElement.AttachEventHandler()のハンドラにC#のメソッドを登録することで、それを呼び出せます。

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>";
Microsoft Learnから検索