为什么我不能使用GeckoView完全渲染html?

时间:2019-10-07 06:12:59

标签: android html kotlin geckoview

我正在尝试从网址中获取html并对其进行处理,然后使用GeckoView对其进行渲染

我本打算使用Jsoup从URL获取html字符串,但是this表示使用Jsoup获取完整的html是一个问题

所以我找到了另一种使用GeckoView(thisapi reference)来获取html的方法

所以我成功地从网址中获取了html字符串,并仅使用GeckoView渲染了它。

这是代码

<Response [400]>
{'error': 'invalid_grant', 'error_description': 'Bad Request'}

问题在于网页未完全打印如下

1

对于上述代码,我还有一个问题

如果我在下面编写了这样的代码,我就发现了这一点

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()
}

首先执行geckoSession.loadData()方法,然后执行lambda函数

我不明白为什么会这样

所以我的问题是

  • 为什么我不能完全打印网页?
  • 为什么lambda函数执行得这么晚?

1 个答案:

答案 0 :(得分:1)

您可以从Firefox桌面使用about:debugging连接到您的设备,并在开发者控制台中检查错误。

我的猜测是页面正在尝试从Google加载图像,并且不允许进行热链接。

如果您要做的只是处理一些html请求,那么您真正应该使用的是应用程序中内置的WebExtension,您可以在此处找到文档:https://gv.dev/consumer/docs/web-extensions