Android: как загрузить строку html внутри WebView? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть веб-вид в моем файле макета в приложении для Android, и я хочу загрузить видео с 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>'

XML-код WebView:

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

я также включаю javascriop в webview:

post_video.getSettings().setJavaScriptEnabled(true)

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

но в веб-просмотре вместо видео отображается просто HTML-код в формате обычного текста!

вы можете увидеть результат на этом скриншоте

как я могу решить эту проблемупроблема?

Обновление:

Я решил проблему с помощью Html.fromHtml (видео) для декодирования моей строки HTML!теперь он работает, и WebView показывает видео.

Ответы [ 3 ]

0 голосов
/ 22 марта 2019

Попробуйте добавить следующие атрибуты в веб-просмотр

    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 в файле манифеста

0 голосов
/ 22 марта 2019

Simple. Сделайте метод адаптера следующим образом.

  @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}"
    />

Если вы не используете привязку данных и хотите просто использовать код, просто возьмите код из примера адаптера и загрузите его прямо в веб-просмотр. Однако привязка данных и адаптеры - это очень хороший способ сохранить код чистым и небольшим.

Наконец, в круговой диаграмме он перестал разрешать загрузку http-трафика (очистить трафик) по умолчанию. Поэтому, если по какой-либо причине загрузка не удалась, вам, возможно, придется добавить в приложение тег, чтобы разрешить загрузку незащищенного HTML. Я не уверен, что загрузка вашей собственной строки HTML считается «небезопасной» или нет, но это может произойти.

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

</application>
0 голосов
/ 22 марта 2019

Попробуйте вместо этого использовать метод loadData (String data, String mimeType, String encoding) с типом mime "text / html" и кодировкой "UTF-8".

Кроме того, вы должны обернуть свой HTML-контент тегами <html> и <body>, чтобы у вас был действительный HTML-документ, а не только допустимый фрагмент документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...