使用c#使用invokescript将多个列表传递给javascript

时间:2014-09-20 23:23:05

标签: c# javascript webbrowser-control

我使用webbrowser控件使用InvokeScript()在html文件中调用javascript函数。我想传递四个列表作为参数,以便我可以使用javascript函数中的数据。

伪代码:

        List<string> list1 = new List<string>();
        list1.Add("foo");
        list1.Add("bar");

        List<string> list2 = new List<string>();
        list2.Add("foo");
        list2.Add("bar");

        List<string> list3 = new List<string>();
        list3.Add("foo");
        list3.Add("bar");

        List<string> list4 = new List<string>();
        list4.Add("foo");
        list4.Add("bar");

        maps_webbrowser.Document.InvokeScript("initialize", list1.ToArray(), list2.ToArray() ,list3.ToArray() ,list4.ToArray());

我读过一篇帖子,其中使用参数变量传递列表

How should an array be passed to a Javascript function from C#?

这是一个JavaScript函数示例:

function foo()
{
var stringArgs = [];
for (var i = 0; i < arguments.length; i++)
    stringArgs.push(arguments[i]);

// do stuff with stringArgs
}

你可以用C#这样称呼它:

List<string> arguments = new List<string>();
arguments.Add("foo");
arguments.Add("bar");
webBrowser.InvokeScript("foo", arguments.ToArray());

但是,这样只传递一个列表。

我写下的伪代码不起作用....

1 个答案:

答案 0 :(得分:0)

经过一夜安眠后,我基本上已经开始工作了:)

根据msdn,对象数组必须作为参数传递:

http://msdn.microsoft.com/en-us/library/cc452443(v=vs.110).aspx

C#代码:

List<string> lat_waypoints = new List<string>();
lat_waypoints.Add("1.11111");
lat_waypoints.Add("2.12112");

List<string> lon_waypoints = new List<string>();
lon_waypoints.Add("34.1234");
lon_waypoints.Add("34.2345");

string lat_string = string.Join(",", lat_waypoints.ToArray());
string lon_string = string.Join(",", lon_waypoints.ToArray());

Object[] objArray = new Object[2];
objArray[0] = (Object)lat_string;
objArray[1] = (Object)lon_string;

maps_webbrowser.Document.InvokeScript("test", objArray);

使用Javascript:

<HTML>
<SCRIPT>
    function test(lat, lon) {

    var lat_split = lat.split(",");
    var lon_split = lon.split(",");

        alert("Lat: " +lat_split[0] + " lon: " + lon_split[0]);
    }
</SCRIPT>

<BODY>
</BODY>
</HTML>

这个解决方案有效,但在我看来它并不是最好的解决方案......

lat和lon值最初存储在带有双精度的列表中。但是,我不知道如何直接传递双精度数组,而不首先将其转换为字符串。

其他有想法的人吗?