Почему я не могу полностью отобразить HTML с GeckoView? - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь извлечь html из URL и манипулировать html, а затем визуализировать его с GeckoView

Я собирался использовать Jsoup для получения строки html из URL, но this сказал, что есть проблема, чтобы получить полный HTML с помощью Jsoup

Так что я нашел другой способ получить HTML, используя GeckoView ( это и API-справочник )

Итак, мне удалось получить строку html из URL и отобразить ее только с GeckoView

Это код

private fun setupGeckoView() { // I call this in the onCreate method
    geckoView = findViewById(R.id.geckoview)
    val runtime = GeckoRuntime.create(this)
    geckoSession.open(runtime)
    geckoView.setSession(geckoSession)
    val executor = GeckoWebExecutor(runtime)     
    val result = executor.fetch(    // from here i start getting the sourcecode inputStream
            WebRequest.Builder("https://google.com")
                    .header("Accept","Application/json")
                    .build())
    result.then { response ->
        htmlContentInStringFormat = response?.body?.bufferedReader().use { it?.readText() } 
        // ㄴ and i get the html string from the inputStream
        geckoSession.loadData(htmlContentInStringFormat!!.toByteArray(Charsets.UTF_8),"text/html")
        // ㄴ and then here i render and print the html string to my screen
        result
    }
    urlEditText.setText(INITIAL_URL) // from here is just for setting a progressbar for web pages loading
    progressView = findViewById(R.id.page_progress)
    geckoSession.progressDelegate = createProgressDelegate()
}

Проблема в том, что веб-страница ненапечатан полностью так, как показано ниже

1

И у меня есть еще один вопрос к приведенному выше коду

Я нашел это, если написал код вродеэто ниже

    result.then { response ->
        htmlContentInStringFormat = response?.body?.bufferedReader().use { it?.readText() }
        result
    }
    geckoSession.loadData(htmlContentInStringFormat!!.toByteArray(Charsets.UTF_8),"text/html")

Метод geckoSession.loadData () выполняется первым, чем этот результат. Лямбда-функция

И я не понимаю, почему это похоже на

мои вопросы

  • Почему я не могу полностью распечатать веб-страницу?
  • Почему эта лямбда-функция выполняется так поздно?

1 Ответ

1 голос
/ 07 октября 2019

Вы можете использовать about:debugging из Firefox Desktop, чтобы подключиться к вашему устройству и проверить ошибки в консоли разработчика.

Моя дикая догадка состоит в том, что страница пытается загрузить изображения из Google, и горячие ссылкине разрешено.

Если все, что вам нужно, это манипулировать некоторыми html-запросами, то, что вам действительно нужно использовать, это встроенный WebExtension в вашем приложении, вы можете найти документы здесь: https://gv.dev/consumer/docs/web-extensions

...