Webview的loadData()在Android 10.0(Q)中无法工作

4

我在尝试将HTML代码作为字符串加载到WebView的loadData()中。但是这种方法没有产生任何效果,而在SDK 29以下的版本中,同样的方法却能正常工作。

webview.loadData(html_code,"text/html",null);

注意:这里我没有对字符串进行任何编码或解码操作,我只是将其作为字符串传递给上述方法。

有任何错误日志吗? - Amin Pinjari
@amin 日志中没有任何内容。 - Ashwin Nirmale
2
通过对字符串执行 base-64 编码后解决。 - Ashwin Nirmale
请参考以下链接的文档:https://developer.android.com/reference/android/webkit/WebView.html - Amin Pinjari
@amin 在发布这个问题之前,我已经参考了那些文档。问题在于,在SDK 29以下版本中,没有加密的情况下同样的代码可以正常工作。而且,为了接受你的答案,“setJavaScriptEnabled(true)”与我的问题无关。 - Ashwin Nirmale
我看到你的代码有问题。 - user6038900
6个回答

15

使用这段代码,它会起作用。

String newhtml_code = Base64.encodeToString(html_code.getBytes(), Base64.NO_PADDING);
        testWebView.loadData(newhtml_code,"text/html", "base64");

4
尝试调用。
String encodedHtml = Base64.encodeToString(html_code.getBytes(), Base64.NO_PADDING);

webview.getSettings().setJavaScriptEnabled(true);

之前

webview.loadData(encodedHtml , "text/html", "base64");

如下所示

    String html_code= "<html><body>Your Actualtext.</body></html>";
    String encodedHtml = Base64.encodeToString(html_code.getBytes(), Base64.NO_PADDING);
 webview.getSettings().setJavaScriptEnabled(true);
    webview.loadData(encodedHtml , "text/html", "base64");

更多细节请参考此链接


1
谢谢,amin。这个解决方案在所有设备上都对我有效,当我将代码迁移到Android 10(目标SDK-29)时,我遇到了问题,Web视图加载空白页面。使用这个解决方案后,一切正常运行。 - Krishna Upadhya

3

我用loadDataWithBaseURL提出了另一种解决方案。

例如:

webView.loadDataWithBaseURL(null, html, "text/html", null, null)

它应该使用更少的CPU和内存资源,因为不需要进行Base64计算和存储。


3

3

manifest file in

 android:usesCleartextTraffic="true"

and

 WebSettings settings = wb_webview.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setSupportZoom(true);
        settings.setBuiltInZoomControls(true);
String html_code = "html code";
wb_webview.loadData(Base64.encodeToString(html_code.getBytes(), Base64.NO_PADDING) , "text/html", "base64");


1

我遇到了同样的问题,并通过使用loadDataWithBaseURL()方法而不是loadData()方法来解决它。

mWebView.loadData(mHtml, "text/html", "UTF-8");

解决方案:

mWebView.loadDataWithBaseURL(null,mHtml,"text/html", "UTF-8", null);

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