2013-01-24 23 views
2

我是wpf的新手。我在我的wpf应用程序中使用“WebBroswer”来呈现Google地图。我有一个googlemap.htm页面,它包含一个初始化(lat,log)JavaScript函数。现在我想从带有纬度和日志参数的.xaml.cs文件中调用该函数。 任何人都可以帮助我。WPF - 从网页浏览器的HTML页面中存在调用JavaScript函数

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> 

回答

5

最简单的方法是使用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); 

所以现在您可以从C#代码访问myfunc

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

我使用VS 2008的动态密钥不支持。任何帮助。 – Mahesh

+0

@Mahesh,我编辑了我的答案。 – SHSE

+0

我得到这个错误未知名称。 (来自HRESULT的异常:0x80020006(DISP_E_UNKNOWNNAME))。请帮帮我。 – Mahesh