从WPF中的Web浏览器调用HTML页面中存在的JavaScript函数
作者:互联网
我是WPF的新手.我在wpf应用程序中使用“ WebBroswer”来渲染Google地图.我有一个googlemap.htm页面,它包含一个initialize(lat,log)JavaScript函数.现在,我想从我的.xaml.cs文件中使用lat和log参数调用此函数.
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>
解决方法:
最简单的方法是使用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:
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});
}
标签:javascript,wpf,google-maps,browser,wpf-controls 来源: https://codeday.me/bug/20191011/1890173.html