1

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

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¶m2=313.62¶m3=GZc6PFXOTfmY58yJyk3DTg==

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

4

1 回答 1

2

没有WebView允许您执行 POST 请求的方法。不过,您可以通过调用内部的 JavaScript 函数来做到这一点WebView。首先,您需要构建一个网页,其中包含您需要的表单和一个提交表单的 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);
}
于 2013-05-18T05:02:28.557 回答