【问题标题】:How to open URL having POST request method in WebView in Windows Store App如何在 Windows Store App 的 WebView 中打开具有 POST 请求方法的 URL
【发布时间】:2013-05-18 02:57:51
【问题描述】:

我需要从另一个 URL 的源代码中打开 WebView 中的某个 URL。我正在通过ScriptNotify 事件获取该 URL 的源代码。该 URL 包含带有 GET/POST 请求和参数的 <form />

HTML 可以包含这个

<form id="pay" method="GET" target="_blank" action="https://xxxxx.com/qqq/www">
    <input type="hidden" value="643" name="param1">
    <input type="hidden" value="313.62" name="param2">
    <input type="hidden" value="GZc6PFXOTfmY58yJyk3DTg==" name="param3">
</form>

或者这个

<form id="pay" method="POST" target="_blank" action="https://xxxxx.com/qqq/www">
    <input type="hidden" value="643" name="param1">
    <input type="hidden" value="313.62" name="param2">
    <input type="hidden" value="GZc6PFXOTfmY58yJyk3DTg==" name="param3">
</form>

现在,如果我有 GET 方法,那么我可以通过解析源代码来开发 URL,它将成为我们的示例。我可以打开WebView

https://xxxxx.com/qqq/www/?param1=643&param2=313.62&param3=GZc6PFXOTfmY58yJyk3DTg==

如果有 POST 请求,我该怎么做?

【问题讨论】:

  • 是否有理由不使用System.Net.Http.HttpClient 或类似的框架类来发送get/POST 请求,而不是使用WebView 进行api 调用?
  • 我只是不想得到 HTTP 响应。我正在使用 WebView,因为 POST 请求打开了某个表单,用户将填写该表单。

标签: windows-8 webview windows-runtime microsoft-metro winrt-xaml


【解决方案1】:

WebView 上没有允许您执行 POST 请求的方法。不过,您可以通过在 WebView 中调用 JavaScript 函数来实现。首先,您需要构建一个网页,其中包含您需要的表单和一个提交表单的 JavaScript 函数:

var html =
    @"<html>
        <head>
            <script type=""text/javascript"">
                function Submit() 
                { 
                    document.getElementById('pay').submit(); 
                } 
            </script>
        </head>
        <body>
            <form id=""pay"" method=""POST"" action=""https://xxxxx.com/qqq/www"">
                <input type=""hidden"" value=""643"" name=""param1"">
                <input type=""hidden"" value=""313.62"" name=""param2"">
                <input type=""hidden"" value=""GZc6PFXOTfmY58yJyk3DTg=="" name=""param3"">
            </form>
        </body>
    </html>";

然后导航到这个 HTML 字符串并调用函数:

webView.NavigateToString(html);
webView.InvokeScript("Submit", null);

在测试期间,第二次调用总是在页面实际加载之前执行并因此失败,所以我不得不通过对LoadCompleted 事件做出反应来解决它:

webView.LoadCompleted += WebViewOnLoadCompleted;
webView.NavigateToString(html);

private void WebViewOnLoadCompleted(object sender, NavigationEventArgs navigationEventArgs)
{
    webView.LoadCompleted -= WebViewOnLoadCompleted;
    webView.InvokeScript("Submit", null);
}

【讨论】:

  • 是否可以不用javascript修改网页?
  • @Xyroid 我不知道有什么办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多