【问题标题】:How to pass objects as argument to javascript via HtmlDocument.InvokeScript如何通过 HtmlDocument.InvokeScript 将对象作为参数传递给 javascript
【发布时间】: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));
}

【问题讨论】:

    标签: c# javascript .net webbrowser-control


    【解决方案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 中。
    • 这是误导性的答案。与问题无关,可能会导致新手浪费几个小时尝试使用它。
    猜你喜欢
    • 2021-04-15
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2022-11-02
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多