从浏览器控件访问 winform 变量

Access winform variable from browsercontrol

我在 ASP.Net Ajax 有申请。我想通过 winform 的浏览器控件打开它,我希望访问用户用来登录 webform 的变量(用户名)。在加载时,我想读取该用户名并使用该用户名在该浏览器控件上执行我的其余网页代码。

我的 ASP.Net Ajax 已发布到内部 Web 服务器并且浏览器控件加载了该 IP 地址。

有什么办法可以做到这一点吗?

编辑:

我发现了 javascript 扩展名:window.external 我可以使用 javascript 从网页调用 C# 过程,这是一个开始,但我需要从 C# 中检索变量 - 这就是问题所在。我已经尝试了

var name = function window.external.GetGlobalVariable(MyGlobalProcedure, "Cannot Get Value");

但是 javascript 错误说该方法不能应用于该对象。

"Store that name in a session variable and access the session in your ajax call"

在您的 ASP.Net 应用程序中创建一个隐藏字段(或者如果它位于某些控件中的 UI 某处也可以)。将用户名或您想分享的任何信息输入该字段。

在您的 WinForms 程序中,您可以像这样通过 WebBrowser 控件请求该字段:

   MessageBox.Show(WebBrowser1.Document.GetElementById("txtUsername").GetAttribute("value"))

以上假设您有一些名为 txtUsername 的 HTML 元素并设置了 value 属性。

你的答案应该如下:

  Public Class Form1

  Dim GlobalVar As String = "Your Name"
  Dim YourBrowser As New WebBrowser

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    YourBrowser.Url = New Uri("Your URL address")
    AddHandler YourBrowser.DocumentCompleted, AddressOf PageLoadComplete
  End Sub

  'The invokescript will only work once the HTML has finished loading itself into your WebBrowser
  Sub PageLoadComplete()
    'Must declare the string inside an array as the invokescript only allows an object to be sent
    Dim VarToSend As String() = {GlobalVar}
    YourBrowser.Document.InvokeScript("yourJavascriptfunction", VarToSend)
  End Sub

javascript 部分应如下所示:

  <script type="text/javascript" language="javascript">         
     function userNameSet(name) {                                   
         $(document).ready(function() { 
            //variable now exists inside your WebBrowser client and can be used accordingly now
            alert(name);
         });
     }
  </script>     

答案参考:http://www.dotnetcurry.com/showarticle.aspx?ID=194