如何通过HtmlDocument.InvokeScript将对象作为参数传递给javascript

时间:2010-12-08 14:45:54

标签: c# javascript .net webbrowser-control

我使用以下命令从带有WebBroser控件的C#应用​​程序调用javascript函数

webBrowser1.Document.InvokeScript("function", new object[] { "arg" });

有没有办法将对象(字符串,双等除外)作为参数传递给函数测试?

class SomeObject 
{
     int number = 0;
     string str = "1234";
}

webBrowser1.Document.InvokeScript("function", new object[] { new SomeObject() });

typeof(args1)下面的javascript中的上述重新结果会返回unknown

function function(arg1) {
   alert(typeof(arg1));
}

2 个答案:

答案 0 :(得分:6)

显然非常微不足道。类SomeObject只需标记为像这样的COM对象。

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
class SomeObject 
{
     int number = 0;
     string str = "1234";
}

但是无法从Javascript访问属性。

答案 1 :(得分:-2)

我的解决方案可能看起来很糟糕。但它的工作

<script type="text/javascript">
 function checkArgs(){
   var args = document.getElementsByTagName("body")[0].args;
   if(args) alert(args);
 }
</script>
...
    <body id="body" runat="server" onload="checkArgs();">
    ...
    </body>

并在代码中

this.body.Attributes["args"] = "my arguments";

如果您使用UpdatePanel,只需使用UpdatePanel内的控件。

修改

要在UpdatePanel中传递参数,请将任一控件放在更新面板

<input id="args" runat="server" type="hidden"/>
or
<asp:HiddenField ID="args" runat="server"/>

在js中更改'document.getElementsByTagName'以按ID获取元素并使用args.value