如何将数组从C#传递给Javascript函数?

Ant*_*ois 12 javascript c# webbrowser-control

我使用WPF中的WebBrowser对象,我在浏览器中加载的页面中调用了一些Javascript代码,如下所示:

myWebBrowser.InvokeScript("myJsFunc", new object[] { foo.Text, bar.ToArray<string>()});
Run Code Online (Sandbox Code Playgroud)

现在,js函数应该迭代第二个参数(一个字符串数组)的元素并相应地做东西.唯一的问题是该参数似乎不会作为js数组传递.

例如,

alert(typeof theArray);
Run Code Online (Sandbox Code Playgroud)

提醒"未知".

从CSharp调用js函数时,将数组作为参数传递的正确方法是什么?

Ili*_*oly 13

也许将它作为json字符串传递,并在js函数中解析它

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var json = serializer.Serialize(bar.ToArray<string>());

myWebBrowser.InvokeScript("myJsFunc", new object[] { foo.Text, json });
Run Code Online (Sandbox Code Playgroud)

JS:

function myJsFunc(json) {
   var data = JSON.parse(json);
   // do something with it.
}
Run Code Online (Sandbox Code Playgroud)

http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx


zne*_*eak 5

它不是解决问题本身,但它解决了问题,如果你只有一个数组要传递:你可以向JavaScript函数发送任意数量的参数,并通过arguments特殊变量访问它们.它变得类似于接受可变数量的参数的函数,具有相同的优点和问题(例如,您必须最后传递数组,并且如前所述,您只能传递一个).

这是一个JavaScript函数示例:

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

    // do stuff with stringArgs
}
Run Code Online (Sandbox Code Playgroud)

你会从C#这样称呼它:

List<string> arguments = new List<string>();
arguments.Add("foo");
arguments.Add("bar");
webBrowser.InvokeScript("foo", arguments.ToArray());
Run Code Online (Sandbox Code Playgroud)