在迁移到 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
即使页面加载成功,布尔字段仍然为真。
我们在迁移到新版本时使用了firefox-source-docs,我们无法在 .77 版的实例上调用ensureBuiltIn
方法。WebExtensionController
GeckoView
根据上面的文档,我们需要像下面那样调用 ensureBuiltIn 方法,但我们不能调用,因为它在编译的 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 时,是否有人帮助我们了解我们所缺少的内容?