C#-WebBrowser控件:window.external访问数组
作者:互联网
我正在尝试从Java语言中的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错误,提示“期望功能”.
那么如何将数组返回到JavaScript代码呢?
JavaScript代码已修复(我无法对其进行修改).因此,将使用window.external.testfunction()调用该函数,并且JavaScript代码期望使用数组作为返回值.
我该如何从C#方面做到这一点?
最好的问候,并感谢您对此的任何想法
安德烈亚斯
解决方法:
I don’t think that this works, because then JavaScript probably will
not be able to access the array elements by using testArray[i], does
it?
我在注释中提到的对象将是最简单的方法,但是您将无法从JavaScript作为testArray [i]访问其元素.
困难的方法是在C#中实现一个类,该类模拟JavaScript数组对象(因此它作为COM IDispatchEx对象公开给JavaScript,并且可以作为testArray [i]访问).此类C#类将需要实现IReflect和IExpando托管接口.如果您想走这条路,我在这里发布了更多详细信息:
> Exposing c# anonymous class objects to COM (JavaScript)
> https://stackoverflow.com/a/19067386/1768303
> https://stackoverflow.com/a/18546866/1768303
还有另一种方式.尽管您无法修改页面的现有JavaScript,但仍然可以inject some new JavaScript code,并随心所欲地对其进行处理.
标签:webbrowser-control,javascript,c,window-external 来源: https://codeday.me/bug/20191121/2054308.html