。NetのWebBrowser Control — Javascriptの挿入方法 、 C#winformsからJavascriptメソッドを呼び出すことは可能ですか などを読みました。それらの例は、関数値またはアラートウィンドウ(同期呼び出し)を返します。イベントハンドラー(非同期呼び出し)から結果を取得する必要があります:
<script type="text/javascript">
window.onload = function() {
var o = new M.Build(document.getElementById("ZID"));
M.Events.observe(o, o.Events.Success, function() {
// I have to get some value!!
});
M.Events.observe(o, o.Events.Fault, function() {
// I have to get some value!!
});
}
</script>
JavaScriptからC#を呼び出す
簡単に言うと、JavaScriptが直接呼び出すことができるC#オブジェクトをWebBrowserに公開できます。WebBrowserクラスは、アプリケーションで設定できるObjectForScriptingというプロパティを公開し、JavaScript内でwindow.externalオブジェクトになります。オブジェクトのComVisibleAttributeをtrueに設定する必要があります
C#:
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class ScriptInterface
{
public void callMe()
{
… // Do something interesting
}
}
webBrowser1.ObjectForScripting = new ScriptInterface();
Javascript:
window.external.callMe();
これは私が持っているコードです。 DocumentCompletedイベントの場合(オンラインからページを取得しているため)
var wb = (WebBrowser)sender
//Lots of other stuff
object obj = wb.Document.InvokeScript("MyFunctionName");
必要な値を返す関数を作成し、呼び出します。
ページにスクリプトを挿入することもできます
string js = "function MyFunctionName(){alert('Yea!');}";
HtmlElement el = wb.Document.CreateElement("script");
IHTMLScriptElement element2 = (IHTMLScriptElement)el.DomElement;
element2.text = js;
head.AppendChild(el);
その後、呼び出すことができます。それが私がやったことです。
WebBrowserコントロールがフォーム内にある場合は、次の操作を実行できます。
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Form1
{
public Form1()
{
InitializeComponent();
webBrowser1.ObjectForScripting = this;
}
public void CallMe()
{
//.... this method can be called in javascript via window.external.CallMe();
}
}