【发布时间】:2011-12-14 12:07:29
【问题描述】:
我想知道如何从 C# 中访问在 webbrowser 控件中运行的 javascript 函数返回的对象的属性。
这是完整的上下文:
我想创建一个基于 OpenStreetMap 的开放层 JavaScript 库的 C# 映射控件。 OSM 地图显示在 webbrowser 元素内显示的网页中。我正在使用 InvokeScript 来通过为开放图层库调用简化的 java 脚本包装器来控制地图。一切正常。
在 C# 包装器中,我想实现一个函数,返回当前在 webbrowser 控件中显示的地图的中心坐标。到目前为止,我只提出了一个非常不雅的解决方案:
在我的 C# 包装器中,我需要两个函数来查询地图中心。首先,我有一个名为 GetCenter 的函数,它使用 InvokeScript 调用一个 JavaScript 函数,该函数又调用另一个 C# 函数 (SetCenterFromJScript) 在我的 C# 包装器中设置地图中心:
public Coord GetCenter()
{
object center = webBrowser.Document.InvokeScript("set_center_in_wrapper");
// I'm stuck here:
Type type = center.GetType();
PropertyInfo[] pi = type.GetProperties();
// I already get the center as an object, but how can i access the
// properties "lon" and "lat" directly so that i can get rid of m_center
// and SetCenterFromJScript alltogether?
return m_center;
}
public void SetCenterFromJScript(double lon, double lat)
{
m_center.lon = lon;
m_center.lat = lat;
}
Java 脚本函数通过 ObjectForScripting 机制调用 C#,如下所示:
function set_center_in_wrapper()
{
var center = map.getCenter().transform(new OpenLayers.Projection("EPSG:900913"),
new OpenLayers.Projection("EPSG:4326"))
window.external.SetCenterFromJScript(center.lon, center.lat);
return center // <- useless at the moment since i don't know how to access the data from C#
}
目前返回值没用,我正在使用 SetCenterFromJScript 提交坐标。如何直接从 C# 访问中心的属性“lon”和“lat”?
在此先感谢,如果有任何帮助,我们将不胜感激。
【问题讨论】:
标签: c# javascript webbrowser-control openlayers openstreetmap