You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android GeckoView Web Extension开发:JS注入无效果问题求助

解决GeckoView 73.0.x Web Extension不生效的问题

看起来你在GeckoView中配置Web Extension时踩了几个版本相关的坑,结合你用的73.0.20200217142647版本,我帮你梳理下关键问题和修正方案:

1. 修正资源路径与文件结构错误

你当前使用的Web Extension路径resource://assets/extension/checkExtension/是错误的。在GeckoView中,访问Android assets目录的正确前缀是resource://android/assets/,所以你的扩展路径应该改为:

WebExtension test = new WebExtension(
    "resource://android/assets/checkExtension/", 
    runtime.getWebExtensionController()
);

同时要确保文件结构正确:checkExtension.js必须和manifest.json放在同一个assets子目录下,也就是:

assets/
└── checkExtension/
    ├── manifest.json
    └── checkExtension.js

你之前描述的结构里checkExtension.js在assets根目录,这会导致manifest找不到脚本文件,直接导致扩展失效。

2. 调整Manifest配置适配版本

针对GeckoView 73版本,你的manifest需要做两个小调整:

  • 移除nativeMessaging权限(当前场景完全用不到,还可能引入不必要的权限校验问题)
  • matches"*"换成标准的<all_urls>(73版本对"*"的支持不稳定,<all_urls>是官方推荐的全匹配写法)

修正后的manifest.json

{
  "manifest_version": 2,
  "name": "checkExtension",
  "version": "1.0",
  "description": "Automatically clicks the authorise button to continue the photo upload.",
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["checkExtension.js"]
    }
  ],
  "permissions": ["geckoViewAddons"]
}

3. 优化代码执行顺序

你当前的代码顺序基本没问题,但为了避免版本兼容问题,建议调整为更稳妥的执行流程:

// 1. 先创建Runtime
GeckoRuntime runtime = GeckoRuntime.create(this);
// 2. 注册WebExtension(必须在加载URL前完成)
WebExtension test = new WebExtension(
    "resource://android/assets/checkExtension/", 
    runtime.getWebExtensionController()
);
runtime.registerWebExtension(test);
// 3. 创建并关联Session
GeckoSession session = new GeckoSession();
session.open(runtime);
// 4. 绑定View并加载目标URL
GeckoView view = findViewById(R.id.geckoview);
view.setSession(session);
session.loadUri("https://www.google.com");

4. 更换更可靠的测试方式

有些网站会默认禁用alert弹窗,或者GeckoView的安全设置会拦截弹窗,建议把checkExtension.js的测试代码换成更直观的页面修改:

// 直接修改页面内容,一眼就能看到效果
document.body.insertAdjacentHTML('afterbegin', '<h2 style="color:red;">Gecko Extension Works!</h2>');

针对GeckoView 73的参考建议

由于你使用的是较旧的稳定版本,建议直接查看对应版本的官方代码快照:

  • 可以在GeckoView的GitHub仓库中切换到v73.0.20200217142647标签,查看当时的Web Extension实现细节
  • 重点关注GeckoRuntime.registerWebExtension()的参数要求和资源路径规则,73版本的API和后续版本差异较大

按照以上步骤调整后,你的Web Extension应该就能正常生效了。

内容的提问来源于stack exchange,提问作者Ziz

火山引擎 最新活动