将授权标头传递给Android Webview LoadData()

时间:2017-03-17 04:27:42

标签: android cookies webview xamarin.android access-token

我有一个包含<img>的HTML内容。此<img>有一个图片网址,只有在用户通过身份验证后才能显示内容。

我创建了WebView,如下所示: -

wvDetail = FindViewById<WebView>(Resource.Id.wvDEtail);
        var data = AppHelper.SelectedNews;
        wvDetail.Settings.JavaScriptEnabled = true;
        var mData = "<p>​<span style=\"color &#58;#000000;font-family&#58;&quot;open sans&quot;, arial, sans-serif;text-align&#58;justify;background-color&#58;#ffffff;\">Proin sem urna, aliquet vel placerat quis, semper et mauris. Sed vel nunc lacus. Vestibulum vitae nisl eros. Donec ullamcorper sem nisl, in pellentesque quam tempus vel. Curabitur in felis nec urna placerat finibus. Donec ut nisi eu enim tincidunt luctus. Phasellus eleifend tortor est, nec maximus est aliquet sit amet. Praesent mollis massa id lacinia volutpat. Vestibulum eget odio sit amet enim fringilla pulvinar.​</span></p><p><br></p><p><img src=\"http://example.com/somesecuredimage.png" alt=\"somesecuredimage.png\" style=\"margin&#58;5px;width&#58;640px;\" /><br></p><p><br></p><p><br></p><p><br></p><p><br></p>";
        wvDetail.LoadData(mData, "text/html", "utf-8");

我有一个访问令牌,我需要将其设置为授权标头的承载者,或者将cookie作为cookie传递给此Webview,以便加载html内容中包含的所有安全图像。

我已经看到了一些解决方案,我们可以将标头作为参数传递,但使用LoadUrl()。有没有办法在加载HTML文本的同时做同样的事情?

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

  

答案没有说明如何传递授权令牌。

您可以创建自己的Android.Webkit.WebViewClient并覆盖ShouldInterceptRequest Method以拦截每个请求,即使您使用的是LoadData方法。

由于我不知道您传递授权令牌的格式,因此我只能在此处显示创建此类WebViewClient的方法。

创建一个继承自MyWebViewClient

WebViewClient
public class MyWebViewClient : WebViewClient
{
    public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest request)
    {
        return base.ShouldInterceptRequest(view, request);

        //TODO: Pass your authorization token here. 
    }
}

然后在Activity

wvDetail = FindViewById<WebView>(Resource.Id.wvDEtail);
wvDetail.Settings.JavaScriptEnabled = true;
wvDetail.SetWebViewClient(new MyWebViewClient());
var mData = "YOUR-DATA";
wvDetail.LoadData(mData, "text/html", "utf-8");