【问题标题】:Xamarin - Pass session to WebView from HttpClientXamarin - 从 HttpClient 将会话传递给 WebView
【发布时间】:2014-10-28 04:18:22
【问题描述】:

我正在使用 Xamarin 为我的 Web 应用程序创建本机登录屏幕。

登录视图提交详细信息、握手,并在满足登录凭据时返回成功。但是,因为一旦我打开页面,会话 cookie 就不会存储在手机的网络视图中,所以它不起作用。

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

任何建议都会很棒。

干杯。

【问题讨论】:

  • 你能在登录方法调用中返回一个令牌并将其传递给你的 webview 吗?
  • 嗨 valdetero。感谢您的回复。我可以。但是,使用 WebView 是否有更好的方法。我可以通过源 URL 的查询字符串传递它,但希望一些更安全的东西......
  • 嗨,你是怎么做到的?谢谢

标签: windows session webview xamarin


【解决方案1】:

我在 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;
        }
    }
}

然后列出加载完成并在您的 web 视图中调用 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 中对我有用。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2017-10-26
    • 2013-01-17
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2020-02-20
    相关资源
    最近更新 更多