首页 文章

在winforms应用程序中从WebBrowser控件中的Web应用程序中读取对象

提问于
浏览
0

我正在创建一个包含WebBrowser用户控件的winforms应用程序 . WebBrowser控件导航到Web应用程序中的页面,该页面请求用户身份验证详细信息 . 输入用户名和密码并提交表单后,Web应用程序将发送请求,如果身份验证成功,则填充applicationValues对象中的变量 .

当实例化applicationValues对象时,我想从WebBrowser控件中的Web应用程序读取对象回到我的Winforms应用程序并关闭包含WebBrowser控件的表单 .

目前,这是有效的(该对象在Web应用程序中成功创建),直到applicationValues对象应该传递回Winforms应用程序的部分;在那里我被困住了 .

这可以用这个控件来完成吗?如果没有,我还应该考虑其他任何方法或解决方法吗?

1 回答

  • 1

    它可以完成,但需要你做一些工作 . 首先,在Web浏览器控件和其中的任何页面之间来回传递数据的最简单方法是通过window.external和invoke脚本 . 当然,您必须在用户控件中设置objectforscripting属性 .

    完成后,您可以通过原始类型自由地将数据从javacript发送到.net . 现在特别针对您的对象,可能值得花时间将其序列化为JSON字符串,然后通过window.external发送,然后反序列化为.NET端的对应对象 . 你可以使用System.Web.Script.Serialization的JavaScriptSerializer当然你也可以使用JSON.net到deserialize .

    以下是MSDN的基本思路

    private void Form1_Load(object sender, EventArgs e)
    {
    
        webBrowser1.ObjectForScripting = this;
    
        webBrowser1.DocumentText =
            "<html><head><script>" +
            "function test(message) { alert(message); }" +
            "</script></head><body><button " +
            "onclick=\"window.external.Test('called from script code')\">" +
            "call client code from script code</button>" +
            "</body></html>";
    }
    
    public void Test(String message)
    {
        MessageBox.Show(message, "client code");
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Document.InvokeScript("test",
            new String[] { "called from client code" });
    }
    

相关问题