繁体   English   中英

Android:如何在WebView中加载html字符串?

[英]Android: how to load html string inside a WebView?

我在Android应用程序的布局文件中有一个webview,我想在其中加载带有html和javascript的视频。 我想用来加载视频的html字符串是:

video= '<div id="15518031408206776"><script type="text/JavaScript" src="https://www.aparat.com/embed/gJ8jm?data[rnddiv]=15518031408206776&data[responsive]=yes"></script></div>'

WebView xml代码是:

<WebView
                        android:layout_width="match_parent"
                        android:layout_height="250dp"
                        android:layout_marginTop="30dp"
                        tools:ignore="WebViewLayout"
                        android:id="@+id/post_video" />

我还在webview中启用了javascriop:

post_video.getSettings().setJavaScriptEnabled(true)

post_video.loadDataWithBaseURL( null, video, "text/html", "UTF-8", null );

但webview只显示纯文本html代码而不是视频!

你可以在这个截图中看到结果

我怎么解决这个问题?

更新:

我通过使用Html.fromHtml(视频)解码我的html字符串解决了这个问题! 现在它正在工作,WebView显示视频。

请尝试使用loadData (String data, String mimeType, String encoding) 方法 ,使用“text / html”mime类型和“UTF-8”编码。

此外,您应该使用<html><body>标签包装html内容,这样您将拥有一个有效的html文档,而不仅仅是一个有效的文档片段。

尝试将以下属性添加到webview

    WebView webview = (WebView) findViewById(R.id.webView1);
    webview.setWebViewClient(new WebViewClient());
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.getSettings().setPluginState(WebSettings.PluginState.ON);
    webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);

还要将android:hardwareAccelerated="true"添加到清单文件中的application标记

简单。 制作这样的适配器方法。

  @JvmStatic
@BindingAdapter("htmlString")
fun loadHTML(view: WebView, htmlString: String) {
    if(htmlString.isEmpty()){
        return
    }

    try{
        view.webChromeClient = WebChromeClient()
        view.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)
            }
            override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
                return false
            }
        }

        view.loadData(htmlString, "text/html", "UTF-8")
    }catch (ex: Exception){
        A35Log.e(TAG, "Error loading html string")
    }
}

然后在你的xml代码中使用它。

 <WebView
    android:id="@+id/wvHtml"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    bind:htmlString="@{viewModel.infoModel.hTML}"
    />

如果您不使用数据绑定并且只想使用代码,那么只需从适配器示例中获取代码并将其直接加载到webview中。 但是,数据绑定和适配器是保持代码清洁和小的一种非常好的方法。

最后,在饼图中它默认停止允许加载http流量(清除流量)。 因此,如果由于任何原因无法加载,您可能必须添加到您的应用程序标记以允许加载非安全的html。 我不确定加载你自己的HTML字符串是否算作“非安全”,但它可能。

 <application
    ...
   android:usesCleartextTraffic="true">

</application>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM