web-dev-qa-db-ja.com

WinFormsのWebBrowserコントロールを介してJavascriptイベントを処理する方法

。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>
17
garik

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();

C#からWebBrowserコントロールでJavaScriptを呼び出す

33
garik

これは私が持っているコードです。 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);

その後、呼び出すことができます。それが私がやったことです。

1
QuinnG

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();
    }
}
0
Ahmad