2014-02-21 1 views
1

WebBrowser 컨트롤에서 InvokeScript를 사용하여 HTML 용 Google Maps JavaScript API를 사용하여 간단한지도를 만들었습니다. JavaScript의 HTML 페이지에지도로 작업하는 몇 가지 함수가 있으며 C#의 WPF 응용 프로그램에서이 메서드를 복제하고 편집하여 메서드를 호출하고 JavaScript와의 인터페이스를 수행하기 위해 필요한 작업을 수행합니다.사용자 정의 형식 구조가 보존 된 InvokeScript에서 C#으로 JavaScript 사용자 지정 형식을 가져 오는 중

지도의 자바 스크립트에서 반환 된 값 중 일부가 문자열, 정수 또는 부울과 같은 단일 값 유형이고 LatLng과 같은 사용자 정의 유형을 반환하지 않기 때문에 문제가 발생합니다. '보존 방법을 모르겠습니다. '사용자 정의 유형의 별도'부분 '으로 리턴 값. 설명 할 것은 더 :

return Convert.ToInt16(browser.InvokeScript("getHeading")); 

자바 스크립트에 다음 함수를 호출 :

function GetHeading() { 
    return map.getHeading(); 
} 

그리고 현재의 제목 속성에 대한 간단한 정수 값을 반환

는 일반적으로 다음 코드를 사용할 수 있습니다 지도의 이것은 쉽고 이것에는 아무런 문제가 없습니다. 그러나 일부 함수는 사용자 정의 반환 유형이 있습니다.

LatLng 유형은 위도와 경도 값으로 구성되어 있으므로 간단한 값을 반환 할 수 없으므로이 게시물의 첫 번째 코드 스 니펫으로 시도하면 오류가 발생합니다. 다음과 같은 일부 함수의 경우 :

function GetCentre() { 
    return map.getCenter(); 
} 

지도 중심의 위도와 경도가 포함 된 LatLng을 반환합니다. 어떻게 반환 값을 보존하고이 같은 C#에서 사용자 정의 유형에 투입 될 위도와 경도로 유지할 수 있습니다 :

public class LatLng 
{ 
    public string latitude { get; set } 
    public string longitude { get; set; } 
} 

내가 자바 스크립트 측면에 두 개의 분리 된 함수를 작성해야합니까? 하나는 중심의 위도를 반환하고 다른 하나는 중심의 위도를 반환합니다. 기본적으로 WebBrowser 컨트롤에서 InvokeScript를 사용하고, 사용자 지정 형식을 반환하는 javascript 함수를 호출하고, C#에서 returnedValue.latitude 및 returnedValue.longitude와 같은 사용할 수있는 사용자 지정 형식의 값을 유지합니다. 이걸 어떻게 할 수 있니, 고마워?

답변

1

단순히 C# 및 .NET DLR의 dynamic 기능을 사용하고 그대로 자바 스크립트 구조를 반환 : Noseration으로

dynamic data = webBrowser1.Document.InvokeScript("eval", new[] { 
    "(function() { return { latitude: 1, longitude: 2 }; })()" }); 

MessageBox.Show("Data: " + data.latitude + ", " + data.longitude); 
0

말했다 :

JavaScript : 

    function getCameraPosition() { 
     return map.getCenter().toJSON(); 
    } 

C# : 
    object[] o = new object[] {}; 
    dynamic res = googleMapWB.Document.InvokeScript("getCameraPosition", o); 
    Console.WriteLine(res.lat+","+res.lng); 

res.lat 및 res.lng가 이미 이 경우에는 두 배.

관련 문제