Android webview在尝试使用自定义标题访问网页时未加载css和javascript

Android webview在尝试使用自定义标题访问网页时未加载css和javascript,javascript,android,css,webview,okhttp,Javascript,Android,Css,Webview,Okhttp,我使用授权标题访问网页,但是当使用带有授权标题的WebViewClient时,webview不会呈现css,也不会加载js public class TableViewTest extends AppCompatActivity { WebView webView; SharedPreferences pref; @SuppressLint("SetJavaScriptEnabled") @Override protected void onC

我使用授权标题访问网页,但是当使用带有授权标题的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;
            }
        }
    };
}
请帮帮我。非常感谢您的帮助。

这对我很有用

(顺便说一句,现在不推荐使用)

我唯一担心的是,在默认浏览器“有问题”的智能手机上,结果可能会被破坏。

使用library解决了这些问题。android中的默认webview有时无法处理css问题

另外,Android webview和AdvancedWebView都不能处理标题,除了webview中的初始请求。它不能在特定webview请求的所有链接中传递标题。请参考此内容以纠正您的疑问

我的问题是标题问题


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

我也面临同样的问题。找到解决方案了吗?@Picci My web service API developer通过为每个表元素创建样式类解决了这个问题。因为通过子类的CSS引用没有加载到web视图中。在那之后,我们换了。这是一个很棒的图书馆。但是我们不能在web视图中的所有链接中使用标题。它仅限于最初的请求。谢谢你提到这件事#乐意帮忙#HappyCoding@Picci实际上,我的web视图正在加载一个表格式感谢您的努力,我通过使用这个库解决了这个问题。shouldInterceptRequest是一个不推荐的方法。@MuhammadMarqod最初的答案是3年前,我在添加一个注释。
WebViewClient wvc = new WebViewClient() {

                @Override
                public WebResourceResponse shouldInterceptRequest (WebView view, String url){
                    try {
                        OkHttpClient httpClient = new OkHttpClient();
                        com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()
                                .url(url.trim())
                                .addHeader("PIPPO", "PIPPO")
                                .build();
                        com.squareup.okhttp.Response response = httpClient.newCall(request).execute();

                        Log.d("TAG",response.header("content-type", "text/html"));
                        Log.d("TAG",response.header("content-encoding",  "UTF-8"));

                        return new WebResourceResponse(
                                null,
                                null,
                                response.body().byteStream()
                        );
                        } catch (Exception e) {
                        //return null to tell WebView we failed to fetch it WebView should try again.
                        return null;
                    }
            }