我在上周开始使用Xamarin(Visual Studio 2017)开始开发iOS应用程序,虽然文档一方面看起来非常好,但另一方面它也非常基础。
我一直在看Pluralsight上的一些内容,它给了我一些基础知识,但我试图找到如何访问网站会话的详细信息时遇到了问题在WebView控件中。
我目前的代码非常简单,我调用WebView
的{{1}}方法,传入我想要显示的网站的网址。 Url网站已经改为保护不那么无辜......
LoadRequest
作为该网站的开发者之一,我知道它会创建一个我需要iOS应用才能访问的自定义会话ID。
在Visual Studio中使用Intellisense,输入" WebView。"给了我没有属性或方法的单词" cookie"或"会话"在那里,我无法看到任何其他可能会提示我访问我需要的数据。
我还添加了以下内容以获取一系列cookie,并在此之后添加断点并观察cookie数组后,我看不到任何包含有关会话中存储的数据的特定信息的内容(包括会话ID)。
var url = "https://MySslSite.com";
WebView.LoadRequest(new NSUrlRequest(new NSUrl(url)));
答案 0 :(得分:0)
您可以在WebView中加载网站后访问Cookie。因此,您需要为WebView创建自定义渲染器。并且,您可以使用 DidFinishNavigation 方法访问Cookie。这是 IWKNavigationDelegate 方法。因此,您需要在 CustomWebViewRenderer 类中继承它。
[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]
namespace MyApp.iOS.Renderers
{
public class CustomWebViewRenderer : ViewRenderer<CustomWebView, WKWebView>,IWKNavigationDelegate
{
protected override void OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var config = new WKWebViewConfiguration { UserContentController = new WKUserContentController() };
var webView = new WKWebView(Frame, config);
webView.NavigationDelegate = this;
SetNativeControl(webView);
}
}
[Export("webView:didFinishNavigation:")]
public void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
{
NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage;
foreach (NSHttpCookie cookie in storage.Cookies)
{
storage.DeleteCookie(cookie);
}
NSUserDefaults.StandardUserDefaults.Synchronize();
}
}
}