我使用授权 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/