实施 GeckoView Web 扩展
Posted
技术标签:
【中文标题】实施 GeckoView Web 扩展【英文标题】:Implement GeckoView Web Extension 【发布时间】:2020-06-03 19:40:22 【问题描述】:我正在尝试在 android 中为 GeckoView 实现一个点头网络扩展,以简单地在网页上执行一些 javascript,相当于普通 Android WebView 上的 webView.evaluateJavascript(),但是我找不到任何有用的在线示例或教程。
我之前曾尝试过 WebView,但是我在登录期间尝试访问错误的站点意味着我无法访问它。但是登录可以使用 GeckoView
到目前为止,我已经关注了这些:
https://sammacbeth.eu/blog/2019/09/04/geckoview-extensions.html
https://mozilla.github.io/geckoview/consumer/docs/web-extensions
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension
但是,它们似乎有点过时了,即使是 mozilla 自己的文档,因为我使用的 API 不再遵循示例。
我正在使用 GeckoView 的稳定版本:73.0.20200217142647
根据上面的[3],我的文件结构是:
java
|
+-- assets
| |
| +--checkExtension
| |
| manifest.json
| checkExtension.js
|
+-- res
|
+-- src
manifest.json的内容是
"manifest_version": 2,
"name": "checkExtension",
"version": "1.0",
"description": "Automatically clicks the authorise button to continue the photo upload.",
"content_scripts": [
"matches": ["*"],
"js": ["checkExtension.js"]
],
"permissions": [
"nativeMessaging",
"geckoViewAddons"
]
'matches' 设置为 '*',以便它应该匹配导航到的所有页面
checkExtension.js 只包含:
alert('hello')
我的 GeckoView 活动是:
GeckoView view = findViewById(R.id.geckoview);
GeckoSession session = new GeckoSession();
GeckoRuntime runtime = GeckoRuntime.create(this);
session.open(runtime);
WebExtension test = new WebExtension(
"resource://assets/extension/checkExtension/",
runtime.getWebExtensionController());
runtime.registerWebExtension(test);
view.setSession(session);
session.loadUri("https://www.google.com");
但是,页面加载时不会显示任何警报。除了尝试显示警告框外,我还尝试了一些特定于站点的目标脚本,但它们都没有奏效。
有什么明显的遗漏或任何可能对我有帮助的资源吗?
非常感谢。
【问题讨论】:
我看到的一个问题是扩展的 URL 应该是 resource://assets/checkExtension/ 而不是你所拥有的,你应该等待 pocmo 响应告诉你的结果,那将为您提供有关扩展程序未运行原因的更多信息 【参考方案1】:但是,页面加载时没有显示警报
请注意,默认情况下,GeckoView 本身不会显示任何警报,而是在您注册 PromptDelegate
时调用 GeckoSession.PromptDelegate.onAlertPrompt()
。
您可以使用alert
代替onAlertPrompt()
来记录或显示对话框。这是示例应用程序实现它的方式:
https://searchfox.org/mozilla-central/rev/fca0be7e2cf2f922c9b927423ce28e8a04b3fd90/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/BasicGeckoViewPrompt.java#68-81
除此之外,registerWebExtension()
返回一个GeckoResult
,您可以使用它来检测扩展是否成功加载。这可以帮助您调试问题,例如:
runtime.registerWebExtension(ext.nativeExtension).then(
Log.d(TAG, "WebExtension registered successfully")
, throwable ->
Log.d(TAG, "WebExtension registration failed", throwable)
)
【讨论】:
以上是关于实施 GeckoView Web 扩展的主要内容,如果未能解决你的问题,请参考以下文章
实施 Firestore 时,Flutter Web 应用程序不会加载