我在我的应用上使用Webview来加载网页。其他网页工作正常,这个似乎加载,但然后显示一个空白页。
html页面的源代码由CGI生成,输出为:
<html>
<head>
<meta name="viewport" content="width=device-width; height=device-height;">
<link rel="stylesheet" href="resource://gre/res/ImageDocument.css">
/*
* This CSS stylesheet defines the rules to be applied to any ImageDocuments,
* including those in frames.
*/
@media not print {
.overflowing {
cursor: zoom-out;
}
.shrinkToFit {
cursor: zoom-in;
}
}
@media print {
img {
display: block;
}
}
</link>
<link rel="stylesheet" href="resource://gre/res/TopLevelImageDocument.css">
@media not print {
body {
margin: 0;
}
img {
text-align: center;
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.completeRotation {
transition: transform 0.3s ease 0s;
}
}
img {
image-orientation: from-image;
}
</link>
<link rel="stylesheet" href="chrome://global/skin/media/TopLevelImageDocument.css">
Filtered chrome url chrome://global/skin/media/TopLevelImageDocument.css
</link>
<title>CGI_GetImage.cgi (immagine JPEG, 640 × 480 pixel) - Riscalata (86%)</title>
</head>
<body>
<img class="shrinkToFit" src="PATH_TO_IMAGE" alt="" width="553" height="415">
</body>
</html>
在我的应用中,我使用此设置将网址加载到我的Webview:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true); // Alstro tried without this...
我认为页面的CSS可能存在某种问题,但不幸的是我无法编辑生成html的CGI的输出。
任何帮助?
编辑:
以下是我加载网址的方式:
webView = (WebView)findViewById(R.id.webViewPuntamento);
webView.setWebViewClient(new PuntamentoWebviewClient());
webView.loadUrl(getUrlPuntamento());
其中PuntamentoWebviewClient()
是WebviewClient的扩展,它处理从服务器接收的基本http身份验证和连接错误。 getUrlPuntamento()
只返回我要打开的网址。
事实是我可以加载并查看除此之外的任何其他页面。我没有错误,我可以通过Toast
显示已加载页面的标题,但没有内容。
getUrlPuntamento()
返回http://USER:PASSWORD@HOST_IP:PORT/cgi-bin/CGI_GetImage.cgi
,因为该页面需要基本身份验证。
另外我用
加载网址前webView.setHttpAuthUsernamePassword(HOST, "Embedded-Device", USERNAME, PASSWORD);
。
我的PuntamentoWebviewClient()
有此
@Override
public void onReceivedHttpAuthRequest(WebView view, @NonNull HttpAuthHandler handler, String host, String realm) {
handler.proceed(USERNAME, PASSWORD);
}
CGI在嵌入式设备上,我尝试通过直接连接到其wifi来联系(此连接正常)。 连接到设备的配置页(相同的身份验证,相同的IP,不同的CGI)似乎工作正常。
答案 0 :(得分:0)
对于未来的我(或其他任何可能涉及此问题的人): 问题是CGI只返回了图像,而不是带有图像的HTML页面。 由于浏览器将图像包装在HTML页面中,因此误解了... 最后,不需要使用WebView,只需要使用AsyncTask来抓取图像并显示它。