【问题标题】:How do you capture the result of a POST in the WebBrowser control?如何在 WebBrowser 控件中捕获 POST 的结果?
【发布时间】:2015-09-25 16:35:10
【问题描述】:

我有一个带有WebBrowser control 的 Winforms 表单。

我已经弄清楚了如何通过将 C# 类的实例附加到 ObjectForScripting 属性来将 C# 代码连接到 Web 浏览器控件中的 Javascript,如下所示:

public partial class Browser : Form
{
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.ObjectForScripting = new ScriptInterface();
    }
}

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ScriptInterface
{
    public void DoSomething(string data)
    {
        // Do something interesting with data here
    }
}

...然后像这样从 Javascript 调用它:

<button onclick=window.external.DoSomething('with this')/>

我还没有弄清楚如何从 WebBrowser 控件中的表单捕获 POST 操作的结果,并在我的 C# 代码中使用它。

【问题讨论】:

  • 您要拦截表单帖子吗?你可以用 jQuery 代替吗?看起来让 jQuery 将数据传回您的外部方法相当简单。
  • 听起来就好了。

标签: javascript c# winforms webbrowser-control


【解决方案1】:

您也许可以使用jQuery post 代替表单帖子。

假设您的表单的 id 为 myForm

$( "#myForm" ).submit(function( event ) {     
  // Stop form from submitting normally
  event.preventDefault();

  // Get some values from elements on the page:
  var $form = $(this),
  var term = $form.find("input[name='s']").val(),
  var url = $form.attr("action");

  // Send the data using post
  var posting = $.post( url, { s: term } )
      .done(function(data) {
          //Pass the response back to your code
          window.external.DoSomething(data);
      });
});

【讨论】:

  • 我是否像&lt;form method="POST"&gt;一样从&lt;form&gt;标签中删除action属性?
  • 不,把它留在那儿。 var url... 行使用它来获取要发布到的 URL。
  • 哦,我明白了。我认为我实际上不会将其发布到任何地方,只需将其传递给ScriptInterface
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
相关资源
最近更新 更多