我在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" />
我还在网络视图中启用了Javascriop:
post_video.getSettings().setJavaScriptEnabled(true)
post_video.loadDataWithBaseURL( null, video, "text/html", "UTF-8", null );
但是Web视图仅显示纯文本html代码而不是视频!
you can see the result in this screenshot
我该如何解决这个问题?
更新:
我通过使用Html.fromHtml(video)解码html字符串解决了这个问题!现在可以正常工作了,WebView会显示视频。
答案 0 :(得分:0)
尝试改用loadData (String data, String mimeType, String encoding)
method,并使用“ text / html” mime类型和“ UTF-8”编码。
此外,您应该使用<html>
和<body>
标签包装html内容,这样您将拥有一个有效的html文档,而不仅仅是一个有效的文档片段。
答案 1 :(得分:0)
尝试将以下属性添加到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
答案 2 :(得分:0)
简单。 制作这样的适配器方法。
@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>