3

私はWPFが初めてです。wpf アプリケーションで「WebBroswer」を使用して Google マップをレンダリングしています。googlemap.htm ページがあり、initialize(lat, log) JavaScript 関数が含まれています。ここで、lat パラメーターと log パラメーターを使用して、.xaml.cs ファイルからこの関数を呼び出したいと考えています。

Googlemap.htm

 <script>
        function initialize(lat, log) {
            var mapProp = {
                center: new google.maps.LatLng(lat, log),
                zoom: 5,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
4

1 に答える 1

7

最も簡単な方法は、次のWebBrowser.InvokeScriptメソッドを使用することです。

 this.WebBrowser.InvokeScript("initialize", 1, 2);

または、次のように JavaScript コードを書き直すこともできます。

 function initialize(lat, log) {
    var mapProp = {
       center: new google.maps.LatLng(lat, log),
       zoom: 5,
       mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
 }

 document.myfunc = initialize; // expose it to the document scope

 google.maps.event.addDomListener(window, 'load', initialize);

myfuncこれで、C# コードからアクセスできるようになりました。

private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
{
    dynamic document = WebBrowser.Document;

    document.myfunc(1, 2);
}

キーワードmyfuncなしで呼び出すこともできます。dynamic

private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
{    
   var document = this.WebBrowser.Document;

   document.GetType().InvokeMember("myfunc", BindingFlags.InvokeMethod, null, document, new object[] {1, 2});
}
于 2013-01-24T08:23:56.760 に答える