Android webview在尝试使用自定义标题访问网页时未加载css和javascript
我使用授权标题访问网页,但是当使用带有授权标题的WebViewClient时,webview不会呈现css,也不会加载jsAndroid 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
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;
}
}