我试图在Javascript中使用C#访问数组。
这是JavaScript代码:
var testArray = window.external.testfunction();
for(var i = 0; i < testArray.length; i++) {
alert(testArray[i]);
}
我使用分配给ObjectForScripting属性的以下C#对象测试了它:
[ComVisible(true)]
public class TestObject
{
public string[] testfunction()
{
var test = new string[1];
test[0] = "test";
return test;
}
}
在尝试访问testArray.length
时,它会抛出一个JavaScript错误,说明&#34;预期功能&#34;。
那么如何将数组返回给JavaScript代码?
JavaScript代码已修复(我无法修改)。因此,函数将使用window.external.testfunction()
调用,并且作为返回值,JavaScript代码需要一个数组。
如何从C#端实现这一目标?
致以最诚挚的问候,并感谢您提出任何想法
安德烈亚斯
答案 0 :(得分:2)
我认为这不行,因为JavaScript可能会这样 无法使用testArray [i]访问数组元素,确实如此 它?
我在评论中提到的对象将是最简单的方式,但您无法从JavaScript访问其元素testArray[i]
。
hard 方式将在C#中实现一个模拟JavaScript数组对象的类(因此它作为COM IDispatchEx
对象公开给JavaScript,可以testArray[i]
访问) 。这样的C#类需要实现IReflect
和IExpando
托管接口。如果你想走这条路,我在这里发布了更多细节:
另一种方法。尽管您无法修改网页的现有JavaScript,但您仍然可以inject some new JavaScript code,并且无论您想要什么,都可以使用它。
答案 1 :(得分:1)
我现在可以通过IReflect界面自行完成工作了! : - )
您需要自己实现方法GetProperties
和InvokeMember
:在GetProperties
中,您需要确保返回的属性名称为“length”,属性为“0” “直到阵列的长度为1。在InvokeMember
中,您只需检查JavaScript要调用的方法并返回正确的结果。
我遇到的最大问题是类PropertyInfo
是抽象的 - 所以我不能用它创建一个新对象。所以我需要从中派生一个自己的类,并使用它来返回自定义属性名称。