javascript - 尝试使用自定义 header 访问网页时,Android webview 不加载 css 和 javascript

标签 javascript android css webview okhttp

我使用授权 header 访问网页,但是当使用带有授权 header 的 WebViewClient 时,webview 不会渲染 css,而且 js 也不会加载。

    public class TableViewTest extends AppCompatActivity {

    WebView webView;
    SharedPreferences pref;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table_view_test);

        String url = "http://myurl";
        pref = getSharedPreferences("app", Context.MODE_PRIVATE);


        webView = (WebView) findViewById(R.id.webView1Id);

        webView.setWebViewClient(wvc);
        //webView.setVerticalScrollBarEnabled(true);
        //webView.setHorizontalScrollBarEnabled(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setUseWideViewPort(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        //webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

        webView.loadUrl("http://myurl");

    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        webView.saveState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        webView.restoreState(savedInstanceState);
    }


    WebViewClient wvc = new WebViewClient() {

        @SuppressWarnings("deprecation")
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            try {
                final String acToken = pref.getString("token", "DEFAULT");

                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder().url(url).addHeader("Authorization", "Bearer " + acToken)
                        .build();

                Response response = okHttpClient.newCall(request).execute();

                return new WebResourceResponse(response.header("text/html", response.body().contentType().type()), // You can set something other as default content-type
                        response.header("content-encoding", "utf-8"),  // Again, you can set another encoding as default
                        response.body().byteStream());


            } catch (ClientProtocolException e) {
                //return null to tell WebView we failed to fetch it WebView should try again.
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    };
}

请帮助我。如有任何帮助,我们将不胜感激。

最佳答案

二手AdvancedWebView图书馆来克服这些问题。 android 中默认的 webview 有时无法处理 css 问题。

而且Android webview 和 AdvancedWebView 都无法处理除 webview 中的初始请求之外的 header 。它无法在特定 webview 请求中的所有链接之间传递 header 。请引用本文来解答您的疑惑Github Question .

我的SO Question对于标题问题。

如果有人找到上述 header 传递问题的解决方案,请随时添加您的解决方案。谢谢。

关于javascript - 尝试使用自定义 header 访问网页时,Android webview 不加载 css 和 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530051/

相关文章:

javascript - CSS 或 jQuery 问题 : Website not behaving correctly

javascript - 如何向此 jquery 脚本添加平滑滚动(到页面顶部)?

jquery - 如何使用 jquery 反转 css 动画?

html - Div 未与边距居中对齐 :auto

javascript - 如何从数组中删除除匹配值之外的对象?

javascript - 设置一个不在另一个数组中的元素数组

java - Android:当我的应用程序处于后台时,如何检测自拍杆按钮点击

android - 如何在Android中获取PDF的当前页码

java - 在对话框中使用 TabHost 出现 NullPointerException?怎样做才正确呢?

javascript - 定义 Javascript slider 命中/滚动区域