如何在Android的GeckoView中注入JS?

问题描述

在迁移到GeckoView的77.0.20200603183750版本之前,我们使用的是71.0.20191208234333版本,因此我们必须更改imp。 WebExtension实例的实例,它仅采用一个参数即JS文件的位置

来自:

currentGeckoView.session?.run{

            getGeckoRuntime(this)?.run{

                val extension = WebExtension("resource://android/assets/location_search/")
                extension.setMessageDelegate(messageDelegate,"location_search")
                registerWebExtension(extension)
            }

            settings.userAgentMode = GeckoSessionSettings.USER_AGENT_MODE_MOBILE
            settings.userAgentOverride = "Mozilla/5.0 (Linux; Android ${Build.VERSION.RELEASE}; Mobile) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36"
            settings.allowJavascript = true
            progressDelegate = createProgressDelegate()
        } 

收件人:

currentGeckoView.session?.run{
            val geckoRuntime = getGeckoRuntime(this)

            geckoRuntime?.webExtensionController?.install("resource://android/assets/location_search/")
                ?.accept({ extension ->
                    extension?.setMessageDelegate(messageDelegate,"location_search")
                    geckoRuntime.registerWebExtension(extension!!)
                },{ exception ->
                    Log.d("webExtensionController","Exception message from WebExtension: $exception"
                    )
                })

            settings.userAgentMode = GeckoSessionSettings.USER_AGENT_MODE_MOBILE
            settings.userAgentOverride = "Mozilla/5.0 (Linux; Android ${Build.VERSION.RELEASE}; Mobile) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36"
            settings.allowJavascript = true
            progressDelegate = createProgressDelegate()
        }

尽管JS注入成功,但这导致阻止传递网页的当前状态。由于进行了此操作,Session.loading布尔字段仍然为true,即使页面已成功加载。

我们在迁移到新版本时使用了firefox-source-docs,在ensureBuiltIn的77版本的WebExtensionController实例上我们无法调用GeckoView方法

根据上述文档,我们需要像下面那样调用sureBuiltIn方法,但由于它已成为已编译的WebExtension.class中的内部方法,因此无法调用

geckoRuntime.getWebExtensionController()
  .ensureBuiltIn("resource://android/assets/messaging/","messaging@example.com")
  .accept(
        extension -> Log.i("MessageDelegate","Extension installed: " + extension),e -> Log.e("MessageDelegate","Error registering WebExtension",e)
  );

在GeckoView中迁移到新版本的WebExtension时,有人能帮助我们解决我们缺少什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...