[英]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.