如何通过 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的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 DBLINK 通过 DBLINK 调用 SELECT?
如何使用jquery通过.load通过跨域获取HTML元素的值
如何通过 Windows Azure 通过 GCM 通过唯一 ID 发送特定 Android 设备的通知?