我想知道我如何訪問由C#中的web瀏覽器控件內運行的JavaScript函數返回的對象的屬性。從C#運行在瀏覽器控制中的java腳本返回的對象#
下面是完整的上下文:
我想創建一個基於OpenStreetMap的開放層JavaScript庫一個C#映射控制。 OSM地圖顯示在webbrowser元素內部顯示的網頁中。我使用InvokeScript來通過調用開放圖層庫的簡化Java腳本包裝來控制地圖。一切工作正常。
在C#包裝器中,我想實現一個函數,返回當前正在顯示的地圖的中心座標,並顯示在瀏覽器控件中。到目前爲止,我只用一個相當不合理的解決方案:
在我的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腳本的功能是通過調用C#如下圖所示的ObjectForScripting機制:
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」?
在此先感謝,任何幫助表示讚賞。
非常感謝你!這是小修改:在我的情況下,類型是雙重的,我必須使用BindingFlags.GetProperty而不是BindingFlag.GetField。 –