Android Webview没有显示特定页面

时间:2015-07-14 11:06:25

标签: android html webview

我在我的应用上使用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)似乎工作正常。

1 个答案:

答案 0 :(得分:0)

对于未来的我(或其他任何可能涉及此问题的人): 问题是CGI只返回了图像,而不是带有图像的HTML页面。 由于浏览器将图像包装在HTML页面中,因此误解了... 最后,不需要使用WebView,只需要使用AsyncTask来抓取图像并显示它。