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

Posted

技术标签:

【中文标题】如何通过 HtmlDocument.InvokeScript 将对象作为参数传递给 javascript【英文标题】:How to pass objects as argument to javascript via HtmlDocument.InvokeScript 【发布时间】:2011-05-22 06:50:23 【问题描述】:

我正在使用以下内容从带有 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));

【问题讨论】:

【参考方案1】:

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

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
class SomeObject 

     int number = 0;
     string str = "1234";

但无法从 Javascript 访问属性。

【讨论】:

您的回答有效,也解决了我的问题。但是,即使您的答案是正确的,也很高兴知道您是如何得出这个结论的。您是否有任何可以链接的参考资料让您得出这个结论?【参考方案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

【讨论】:

我相信 UpdatePanel 是 web 命名空间的一部分。我正在制作一个嵌入浏览器控件的 Windows 窗体应用程序。我需要将 C# 应用程序中的数据移动到浏览器控件中托管的 Javascript 中。 这是误导性的答案。与问题无关,可能会导致新手浪费几个小时尝试使用它。

以上是关于如何通过 HtmlDocument.InvokeScript 将对象作为参数传递给 javascript的主要内容,如果未能解决你的问题,请参考以下文章