我使用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());
但是,这样只传递一个列表。
我写下的伪代码不起作用....
答案 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值最初存储在带有双精度的列表中。但是,我不知道如何直接传递双精度数组,而不首先将其转换为字符串。
其他有想法的人吗?