编程语言
首页 > 编程语言> > C#-WebBrowser控件:window.external访问数组

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