2014-10-28 118 views
0

我使用Xamarin为我的Web应用程序创建本机登录屏幕。Xamarin - 从HttpClient将会话传递给WebView

登录视图提交详细信息,握手并在满足登录凭证时返回成功。但是,一旦打开页面,会话cookie不会存储在手机的Web视图中,因此无法正常工作。

有什么办法可以从HttpClient调用的结果中获取会话cookie并将它传递给Xamarin WebView。这可以在一个普通的类中完成,还是必须是特定于设备的?如果它必须是设备特定的,有没有办法为Windows Phone做到这一点?

任何建议将是伟大的。

干杯。

+0

您可以在您的登录方法调用中返回一个令牌并将其传递给您的webview? – valdetero 2014-10-28 19:23:16

+0

嗨valdetero。感谢您的回复。我可以。但是有没有一个更好的方法用于WebView。我可以通过它的源URL的查询字符串,但希望有一些事情更安全... – 2014-11-01 03:03:36

+0

嗨,你是怎么做到这一点?谢谢 – 2015-01-06 08:14:07

回答

0

我正在做类似的Windows Phone,但我有一个sessionId,我传递给webview源内的JavaScript - 我使用自定义渲染器,然后调用网页上的脚本( WebView)

要实现此设置一个自定义视图和渲染器。然后在你的渲染器获取视图和SessionID属性的观点:

protected override async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     base.OnElementPropertyChanged(sender, e); 

     if(e.PropertyName == SessionWebView.SessionIdProperty.PropertyName) 
     { 
      view = Element as SessionWebView; 
      Control.LoadCompleted += Control_LoadCompleted;   

      if (view != null) 
      { 
       _currentSessionId = view.SessionId; 
      } 
     } 
    } 

那么对于上装完成上市,并调用javascript函数中的网页视图。

void Control_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     try 
     { 
      if (!scriptCalled) 
      { 

       Control.IsScriptEnabled = true; 
       var param = new string[1]; 
       param[0] = _currentSessionId; 
       Control.InvokeScript("initWebView", param); 
       scriptCalled = true; 
      } 
     } 
     catch(Exception ex) 
     { 
      throw; 
     } 
    } 

不知道是否有更好的方法,但这在WindowsPhone中适用于我。