如何通过 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的主要内容,如果未能解决你的问题,请参考以下文章

如何通过android上的ADB命令通过pc拨打电话?

如何通过 DBLINK 通过 DBLINK 调用 SELECT?

如何使用jquery通过.load通过跨域获取HTML元素的值

如何通过 Windows Azure 通过 GCM 通过唯一 ID 发送特定 Android 设备的通知?

如何通过方法(不是api)通过identityserver4获取访问令牌?

如何通过主机从外部通过 SSH 连接到 VirtualBox 来宾? [关闭]