gpt4 book ai didi

c# - 将 JavaScript 自定义类型从 InvokeScript 返回到 C#,并保留自定义类型结构

转载 作者:行者123 更新时间:2023-11-28 01:32:35 26 4
gpt4 key购买 nike

我正在 WebBrowser 控件上使用 InvokeScript,尝试使用适用于 HTML 的 Google Maps JavaScript API 制作简单的 map 。我在 JavaScript 的 HTML 页面中编写了一些函数来处理 map ,并且我在 C# 的 WPF 应用程序中复制了这些方法并对其进行了编辑,以便它们调用方法并执行与 JavaScript 交互所需的操作。

我遇到了问题,因为 map 的 javascript 返回的值并非都是简单的单值类型(如字符串、整数或 bool 值),并且返回自定义类型(如 LatLng),而且我不知道如何“保留”返回的值作为自定义类型的单独“部分”。为了帮助解释更多:

通常我可以使用以下代码:

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

它在 JavaScript 中调用以下函数:

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

并返回 map 当前标题属性的简单整数值。这很容易,而且没有任何问题。但有些函数具有自定义的返回类型。

LatLng 类型由纬度值和经度值组成,因此它无法返回简单的值,如果我用本文的第一个代码片段尝试它,则会抛出错误。对于如下所示的某些功能:

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

返回包含 map 中心纬度和经度的 LatLng。如何保留返回值并将其保留为纬度和经度,然后将其放入 C# 中的自定义类型中,如下所示:

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

我必须在 JavaScript 端编写两个单独的函数吗?:一个返回中心的纬度,另一个返回中心的经度。基本上我想要做的是在 WebBrowser 控件上使用 InvokeScript,调用返回自定义类型的 javascript 函数,并将值保留在自定义类型中,然后我可以在 C# 中使用该值,例如 returnedValue.latitude 和 returnedValue.longitude。我该怎么做,谢谢?

最佳答案

只需使用 C# 和 .NET DLR 的动态功能,并按原样返回 JavaScript 结构:

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

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

关于c# - 将 JavaScript 自定义类型从 InvokeScript 返回到 C#,并保留自定义类型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com