如何在Windows应用商店App中的WebView中打开具有POST请求方法的URL

时间:2013-05-18 02:57:51

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

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

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请求,我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

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);
}