簡體   English   中英

WebView.loadData 不適用於 Android 9.0 (API-29)

[英]WebView.loadData not working on Android 9.0 (API-29)

我有一個文章應用程序,我在WebView顯示文章。 在 Android 9.0 (API-29) 版本中,此WebView不起作用。 該應用程序在我的文章活動中沒有顯示任何內容。

mWebView.setVisibility(View.VISIBLE);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setMinimumFontSize(14);

String htmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
   + "<head>"
   + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"
   + "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"
   + "<style type=\"text/css\">body{color: #525252;} img {max-width: 100%; height: auto}</style>"
   + "</head>"
   + item.getContent() //content of item
   + "";

mWebView.loadData(htmlContent, "text/html; charset=utf-8", "UTF-8");

因此,我該如何解決這個問題?

我解決了我的問題,問題出現在具有最新 Chrome 的智能手機中。

解決方案:

不使用

mWebview.loadData

方法,而是使用

mWebview.loadDataWithBaseURL

結果我的解決方案是:

mWebview.loadDataWithBaseURL(null,htmlContent,"text/html", "utf-8", null);

您的 HTML 內容應該是 Base64 或 URL 編碼的。 您的 HTML 示例中有一個“#”,它會導致某些 WebView 版本出現問題。

這是 Base64 編碼的示例。

String htmlContent = "...";
String encodedHtml = Base64.encodeToString(htmlContent.getBytes(), Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");

這是詳細的javadoc

我在 Android 9.0 版也遇到了同樣的問題

此頁面上的文檔( https://developer.android.com/about/versions/pie/android-9.0-migration )提到:

在 Android 9 中,Java 語言的 UTF-8 解碼器更加嚴格,並且遵循 Unicode 標准。

所以我嘗試將 UTF-8 轉換為 Base64 並使用 loadData()

try {
       String base64 = null;
       base64 = android.util.Base64.encodeToString(lecureHtmlData.getBytes("UTF-8"),
                    android.util.Base64.DEFAULT);
       wvLecture.loadData(base64, "text/html; charset=utf-8", "base64");
    } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
    }

現在它像往常一樣工作。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM