簡體   English   中英

有什么方法可以在 xamarin.forms 上使用 webview.postURL 嗎?

[英]Is there a way i can use the webview.postURL on xamarin.forms?

我正在創建一個使用 Xamarin.forms 包裝我的網站的應用程序。 我想在我的移動應用程序上實現登錄頁面,該頁面將使用 webview.postURL 傳遞網站上的登錄信息。 postURL 是否適用於 iOS 和 android? 還是只有安卓? 如果它只適用於 android,是否有辦法同時適用於兩個平台?

我是 xamarin 和 c# 的新手,示例代碼或 github 鏈接會對我有很大幫助。

您可以使用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()
        {

        }
    }
}

在內容頁

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 以上版本和 MacOS,如果您希望訪問不安全的站點,您可能需要配置或禁用 ATS

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

在安卓項目中

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

            }

        }

    }
}

有關自定義渲染器的更多詳細信息,您可以參考此處

WkWebview通過 Webview 的 POST 請求

[程序集:ExportRenderer(typeof(PaymentWebview),typeof(PaymentWebViewRenderer))] namespace MMFInvestorApp.iOS.Utils { public class PaymentWebViewRenderer: WkWebViewRenderer { protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e);

        if (NativeView != null)
        {
            var request = new NSMutableUrlRequest(new NSUrl(new NSString(paymentwebview.url))); //Your Url
            request.HttpMethod = "POST";
            request.Body = NSData.FromString(paymentwebview.data); //Data for POST
            request["Content-Length"] = req.Body.Length.ToString();
            request["Content-Type"] = "application/x-www-form-urlencoded charset=utf-8";
            LoadRequest(request);
        }

    }


}

}

對於 UIWebview(2020 年 4 月棄用

[程序集:ExportRenderer(typeof(PaymentWebview),typeof(PaymentWebViewRenderer))] namespace MMFInvestorApp.iOS.Utils { public class PaymentWebViewRenderer: WebViewRenderer { protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e);

        if (NativeView != null)
        {
            var paymentwebview = Element as PaymentWebview;
            var request = new NSMutableUrlRequest(new NSUrl(new NSString(paymentwebview.url)));//Your Url
            request.Body = paymentwebview.data; //Data for POST
            request.HttpMethod = "POST";
            LoadRequest(request);
        }

    }


}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM