Javascript から C# メソッドを呼び出す
HTML ドキュメントと WPF 間の通信には、アプリケーション間の完全な信頼が必要です。javascript では、window.external は、WebBrowser の外部でメソッドを呼び出すために使用できる外部アプリケーションを指します。
これを行うには、2 つの間のインターフェイスを作成する必要があります。Javascript を使用して直接アクセスできるヘルパー メソッドを使用する必要があります。WPF WebBrowser コントロールを使用してこれを実現する方法を見てみましょう。
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
Mainwindow mExternalWPF;
public ObjectForScriptingHelper(Window1 w)
{
this.mExternalWPF = w;
}
}
したがって、基本的にこのクラスを使用すると、JavaScript から直接 .NET メソッドを呼び出すことができます。このヘルパー クラスは、Permission を FullTrust に設定し、ComVisible にも設定します。したがって、実際には Com 要素である WebBrowser は、クラスと直接通信して、ブラウザが読み込まれる親ウィンドウであるクラス ObjectForScriptingHelper 内のメソッドを呼び出すことができます。javascript では、window.external を使用してこのクラスを指すことができます。
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
Mainwindow mExternalWPF;
public ObjectForScriptingHelper(Window1w)
{
this.mExternalWPF = w;
}
public void InvokeMeFromJavascript(string jsscript)
{
this.mExternalWPF.tbMessageFromBrowser.Text = string.Format("Message :{0}", jsscript);
}
}
クラス ObjectForScriptingHelper クラス内にメソッド InvokeMeFromJavascript があるとします。このクラスを使用するには、そのオブジェクトを作成し、それを WebBrowser コントロールの ObjectForScripting プロパティに渡す必要があります。
だから私は書く、
ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);
this.wbMain.ObjectForScripting = helper;
次に、次のように html に移動します。
<input type="text" id="txtMessage" />
<input type="button" value="InvokeMe" onclick="javascript:window.external.InvokeMeFromJavascript(document.getElementById('txtMessage').value);" />
これにより、テキストボックスとボタンが読み込まれます。上記のコードを見ると、window.external を使用して、ObjectForScriptHelper クラスで宣言したのと同じ関数を呼び出しています。したがって、WebBrowser 内の Button をクリックすると、その外側の TextBlock にメッセージが表示されます。
上の画像では、ユーザーが WebBrowser 内の InvokeMe をクリックすると、外部に配置された TextBlock が更新されます。
ソース: www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf.aspx