无法在 Android WebView 中加载相对路径 URL
Not able to load relative path URL in Android WebView
我有一个遥控器 URL,我想在我的网络视图中加载它。此页面受 headers 保护。该页面正在加载,但未加载我正在尝试加载的 HTML 内的相对 URLS。
相同的 URL 在网络上运行良好,但无法在此处加载。主要问题是它没有加载 java 脚本文件。
这是我的代码:
WebSettings webViewSettings = webView.getSettings();
webViewSettings.setJavaScriptEnabled(true);
webViewSettings.setDomStorageEnabled(true);
webViewSettings.setSupportZoom(true);
webViewSettings.setBuiltInZoomControls(true);
webViewSettings.setDisplayZoomControls(true);
webViewSettings.setAllowFileAccess(true);
webViewSettings.setLoadWithOverviewMode(true);
webViewSettings.setUseWideViewPort(true);
webViewSettings.setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show();
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(flip_book);
httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken));
httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"));
httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8"));
HttpResponse httpReponse = client.execute(httpGet);
InputStream responseInputStream = httpReponse.getEntity().getContent();
return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream);
//text/html
} catch (ClientProtocolException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
} catch (IOException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
});
webView.loadData("<iframe src=\"" +
"" +
flip_book +
"\"></iframe>", "text/html",
"utf-8");
请帮忙。
请尝试使用以下代码,也许它应该有效:
WebSettings webViewSettings = webView.getSettings();
webViewSettings.setJavaScriptEnabled(true);
webViewSettings.setDomStorageEnabled(true);
webViewSettings.setSupportZoom(true);
webViewSettings.setBuiltInZoomControls(true);
webViewSettings.setDisplayZoomControls(true);
webViewSettings.setAllowFileAccess(true);
webViewSettings.setLoadWithOverviewMode(true);
webViewSettings.setUseWideViewPort(true);
webViewSettings.setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show();
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(flip_book);
httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken));
httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"));
httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8"));
HttpResponse httpReponse = client.execute(httpGet);
InputStream responseInputStream = httpReponse.getEntity().getContent();
return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream);
//text/html
} catch (ClientProtocolException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
} catch (IOException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
});
webView.loadDataWithBaseURL("<iframe src=\"" +
"" +
flip_book +
"\"></iframe>", "text/html",
"utf-8",null);
你能用 OkHTTP 试一下吗:
loader.showLoader();
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
loader.dismissLoader();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
loader.dismissLoader();
showAlert("Something went wrong","Ok");
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
try {
String url = request.getUrl().toString();
return getNewResponse(url);
} catch (Exception e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
private WebResourceResponse getNewResponse(String url) {
try {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url.trim())
.addHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken))
.addHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"))
.addHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8")).build();
Response response = httpClient.newCall(request).execute();
return new WebResourceResponse(
null,
response.header("content-encoding", "utf-8"),
response.body().byteStream()
);
} catch (Exception e) {
return null;
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl(flip_book);
我有一个遥控器 URL,我想在我的网络视图中加载它。此页面受 headers 保护。该页面正在加载,但未加载我正在尝试加载的 HTML 内的相对 URLS。
相同的 URL 在网络上运行良好,但无法在此处加载。主要问题是它没有加载 java 脚本文件。
这是我的代码:
WebSettings webViewSettings = webView.getSettings();
webViewSettings.setJavaScriptEnabled(true);
webViewSettings.setDomStorageEnabled(true);
webViewSettings.setSupportZoom(true);
webViewSettings.setBuiltInZoomControls(true);
webViewSettings.setDisplayZoomControls(true);
webViewSettings.setAllowFileAccess(true);
webViewSettings.setLoadWithOverviewMode(true);
webViewSettings.setUseWideViewPort(true);
webViewSettings.setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show();
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(flip_book);
httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken));
httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"));
httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8"));
HttpResponse httpReponse = client.execute(httpGet);
InputStream responseInputStream = httpReponse.getEntity().getContent();
return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream);
//text/html
} catch (ClientProtocolException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
} catch (IOException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
});
webView.loadData("<iframe src=\"" +
"" +
flip_book +
"\"></iframe>", "text/html",
"utf-8");
请帮忙。
请尝试使用以下代码,也许它应该有效:
WebSettings webViewSettings = webView.getSettings();
webViewSettings.setJavaScriptEnabled(true);
webViewSettings.setDomStorageEnabled(true);
webViewSettings.setSupportZoom(true);
webViewSettings.setBuiltInZoomControls(true);
webViewSettings.setDisplayZoomControls(true);
webViewSettings.setAllowFileAccess(true);
webViewSettings.setLoadWithOverviewMode(true);
webViewSettings.setUseWideViewPort(true);
webViewSettings.setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show();
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(flip_book);
httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken));
httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"));
httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8"));
HttpResponse httpReponse = client.execute(httpGet);
InputStream responseInputStream = httpReponse.getEntity().getContent();
return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream);
//text/html
} catch (ClientProtocolException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
} catch (IOException e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
});
webView.loadDataWithBaseURL("<iframe src=\"" +
"" +
flip_book +
"\"></iframe>", "text/html",
"utf-8",null);
你能用 OkHTTP 试一下吗:
loader.showLoader();
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
loader.dismissLoader();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
loader.dismissLoader();
showAlert("Something went wrong","Ok");
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
try {
String url = request.getUrl().toString();
return getNewResponse(url);
} catch (Exception e) {
//return null to tell WebView we failed to fetch it WebView should try again.
return null;
}
}
private WebResourceResponse getNewResponse(String url) {
try {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url.trim())
.addHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken))
.addHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID"))
.addHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8")).build();
Response response = httpClient.newCall(request).execute();
return new WebResourceResponse(
null,
response.header("content-encoding", "utf-8"),
response.body().byteStream()
);
} catch (Exception e) {
return null;
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl(flip_book);