低于4.0版本的安卓中,Webview加载页面出现问题

3
我正在尝试在Webview中显示一个结果网页,但在Android 4.0以下版本上出现了奇怪的结果。我有一张屏幕截图,展示了差异。

在Android 4.0以上的版本上,它显示正确,并且在我的Galaxy S2上运行良好,但是在两部带有Android 2.2和2.3的三星手机以及模拟器上显示错误。我尝试使用Android 3.0的模拟器,结果相同。需要注意的是,该网页在浏览器上可以正常工作,我有一种感觉,这个网站可能会进行一些重定向,如果有帮助的话。

以下是我用来加载页面的代码:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.webview);

    WebView webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);

    // Show the web page
    webView.loadDataWithBaseURL(null, MainActivity.content, "text/html",
            "UTF-8", null);

}

并且图片

有什么想法,为什么在所有Android版本上都不能正常工作?

更新 经过多个版本的WebViews尝试加载网站URL,并使用不同的设置,发现该网站在Android 4以下的设备上无法正确加载。我陷入了困境。

更新1

我注意到在旧版本中,问题不是页面无法正确加载,而是它尝试加载页面的网络版本而不是移动版本。我尝试更改用户代理,但没有任何区别。

更新2

我尽可能地查找了关于WebViews和内容加载的所有信息,但是我无法确定问题所在。这是我的代码,虽然只有启用Java脚本时才能正常工作。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.webview);

    WebView webView = (WebView) findViewById(R.id.webView1);

    webView.setWebChromeClient(new WebChromeClient());
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.setPersistentDrawingCache(0);
    webView.setInitialScale(1);
    webView.getSettings().setDefaultTextEncodingName("utf-8");

    String webData = MainActivity.content;

    webData = webData.replace("#", "%23");
    webData = webData.replace("%", "%25");
    webData = webData.replace("\\", "%27");
    webData = webData.replace("?", "%3f");
    webView.getSettings()
            .setUserAgentString(
                    "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");

    webView.loadData(webData, "text/html; charset=UTF-8", null);

}

// webView.loadDataWithBaseURL(MainActivity.url, MainActivity.content,
// "text/html", "UTF-8", null);

// webView.loadData(MainActivity.content, "text/html; charset=utf-8",
// "UTF-8");

我有什么遗漏的吗?

此外,如果有帮助的话,这是我获取 HTTP Post 响应并用于在 Webview 中显示的代码:

HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("http://www.fernbus24.de/bus-"
                + vonCopy + "-" + nachCopy);
        url = "http://www.fernbus24.de/bus-" + vonCopy + "-" + nachCopy;

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("_searchbox",
                "d5ed667846"));

        nameValuePairs.add(new BasicNameValuePair("von", von));
        nameValuePairs.add(new BasicNameValuePair("nach", nach));
        nameValuePairs.add(new BasicNameValuePair("datum", datum));
        // etc...
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpClient.execute(httpPost);

            InputStream is = response.getEntity().getContent();
            Log.i("Test", "response status"
                    + response.getStatusLine().getStatusCode());

            InputStreamReader inputStreamReader = new InputStreamReader(is);

            BufferedReader bufferedReader = new BufferedReader(
                    inputStreamReader);

            StringBuilder stringBuilder = new StringBuilder();

            String bufferedStrChunk = null;

            while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
                stringBuilder.append(bufferedStrChunk);
            }

            content = stringBuilder.toString();

            Log.i("Test", "content is " + content);

        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

更新3

我尝试设置webView.setInitialScale(50);,结果如下图所示:Image

2个回答

1
你已经尝试过了吗?
webView.setInitialScale(50);

是的,我在更新3中写了结果。 - Mihai Boisteanu

0

试试这个;

Webview webView = (WebView) findViewById(R.id.webView1);


    wb.getSettings().setJavaScriptEnabled(true);
    wb.setWebViewClient(new WebViewClient());
    wb.loadUrl("URL");

如果它不起作用,请写下您的URL,我会尝试一下。

我无法使用getURL,因为我正在另一个Activity中加载网页结果并将其传递到此WebView。 - Mihai Boisteanu
我尝试搜索后得到了完全相同的结果。网址是:http://www.fernbus24.de/ - Mihai Boisteanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接