有没有办法可以在xamarin.forms上使用webview.postURL?

问题描述 投票:0回答:1

我正在使用Xamarin.forms创建一个包含我的网站的应用程序。我想在我的移动应用程序上实现登录页面,该页面将使用webview.postURL在网站上通过登录。 postURL适用于iOS和Android吗?还是仅限android?如果它只适用于Android有两种平台可以做到这一点吗?

我是xamarin和c#的新手,示例代码或github链接对我很有帮助。

c# xamarin.forms webview http-post
1个回答
0
投票

您可以使用CustomRenderer实现它。

在Forms中,定义Webview的子类

using Xamarin.Forms;

namespace xxx
{
    public class MyWebview:WebView
    {
        public string data; //Parameters that you want to pass
        public string url;
        public MyWebview()
        {

        }
    }
}

在contentPage中

public MainPage()
{
   InitializeComponent();

   Content = new StackLayout
     {
        Children =
          {
            new MyWebview()
             {
               url="your url",
               WidthRequest = 300,
               HeightRequest = 500,
               data = "userName=xxx"
              },
          },
          VerticalOptions = LayoutOptions.FillAndExpand,
          HorizontalOptions=LayoutOptions.FillAndExpand

      };
}

在iOS项目中

using Foundation;
using UIKit;


using xxx;
using xxx.iOS;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly:ExportRenderer(typeof(MyWebview),typeof(MyWebViewRenderer))]
namespace xxx.iOS
{
    public class MyWebViewRenderer:WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if(NativeView!=null)
            {

                var mywebview = Element as MyWebview;

                var request = new NSMutableUrlRequest(new NSUrl(new NSString(mywebview.url)));
                request.Body = mywebview.data;
                request.HttpMethod = "POST";
                LoadRequest(request);

            }
        }        

    }
}

笔记

对于iOS 9及以上版本,如果您希望访问不安全的站点,则可能需要配置或禁用ATS

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

在Android项目中

using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Webkit;
using Android.Widget;

using xxx;
using xxx.Droid;

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(MyWebview), typeof(MyWebViewRenderer))]
namespace xxx.Droid
{
    public class MyWebViewRenderer:WebViewRenderer
    {
        public MyWebViewRenderer(Context context):base(context)
        {

        }

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);

            if(Control!=null)
            {
                var mywebview = Element as MyWebview;

                var postData = Encoding.UTF8.GetBytes(mywebview.data);
                Control.PostUrl(mywebview.url, postData);

            }

        }

    }
}

有关自定义渲染器的更多详细信息,请参阅here

© www.soinside.com 2019 - 2024. All rights reserved.