问题标签 [firefox-addon-webextensions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1295 浏览

firefox-addon - 如何让 firefox 附加内容脚本在其他页面脚本之前注入和运行脚本?

我正在开发浏览器扩展/附加组件。我们让它在 Chrome 中运行,所以我试图让它在 Firefox 中运行。

我已经在 Firefox Developer Edition 49.0a2 (2016-07-25) 中加载了我的插件。

我的扩展涉及一个 content_script 设置为run_at: document_start,因此它可以在其他页面脚本运行之前注入一个脚本标记,因此它可以使一个对象全局可用于网站。

这似乎在 Chrome 中运行良好,但在 Firefox 中它已被证明有点竞争条件,大多数时间其他页面资源首先加载。

是否有一种策略可以在任何其他页面脚本运行之前以一种可以注入和加载脚本的方式加载内容脚本?

当我添加日志时,我可以很好地隔离正在发生的事情。在此示例内容脚本中:

现在如果文件scripts/inpage.js只是运行一个日志,比如

我访问了一个带有这样脚本的页面:

在实践中,步骤 2 和步骤 3 以不确定的顺序运行。

非常感谢!

如果您敢自己尝试,我在一个特殊分支的公共存储库中有 Firefox 兼容版本的脚本:https ://github.com/MetaMask/metamask-plugin/tree/FirefoxCompatibility

0 投票
1 回答
357 浏览

javascript - 为什么 Firefox 不允许您在主框架中执行脚本?

我正在使用基于 Chrome 的 Firefox 的新 webExtensions 框架编写一个 webextension。所有示例扩展都在 Nightly 构建中工作,所以这就是我要测试的地方。我想要做的是在内容页面加载时运行一个脚本。这是我的 background.js 页面:

背景.js

这适用于每晚。我从背景页面获取详细信息列表(“详细信息是...”),并在内容页面的控制台上获取几行“ok”,每个资源对应一个加载的资源。它在 Chrome 中运行相同(清单文件略有不同)。

我想要的是第二种变体,它只在页面上运行一次。这在 Chrome 中运行良好。在 Nightly 中,它显示来自主框架的一条“详细信息”消息,但内容页面的控制台中没有显示任何内容。

我确定这是一个时间问题,但这里有什么问题?


manifest.json(删除 "applications":{...} 以与 Chrome 一起使用)

0 投票
1 回答
52 浏览

javascript - 跨站点请求和浏览器插件

我正在尝试使用“新”WebExtensions 系统开发一个基本的 Firefox 插件。

我想

  1. 从网页中提取一些文本(属于我)
  2. 使用远程网站对其进行评估
  3. 在同一页面发布结果

问题是如何使用插件发出 Web 请求(第 2 点)。我发现我可以使用 XMLHttpRequest,但出于安全原因,我无法访问远程路径。

那是因为(我猜)javascript 代码是在页面内运行的,尽管我曾认为插件会是......外部的。

当然结果会页面内,但我假设插件可以作为代理来发出这个请求。那就是说我不知道​​我应该怎么做。

我不想使用一些奇怪的技巧(比如删除一些安全控制),我想以“正确”的方式来做。

我也不明白的是,插件是否必须在它们所针对的页面内运行。

编辑:好的,事实证明 chrome 文档实际上比 mozilla 更好。要实际使用 XHR 跨站点请求,您必须在清单中添加额外的代码行。

我仍然不确定这是否是完成我的目标的正确方法。

0 投票
2 回答
1894 浏览

javascript - Firefox WebExtension:如何在禁用/卸载之前运行代码?

我最近将我的 GreaseMonkey 脚本转换为 WebExtension,只是为了获得对该过程的第一印象。现在我已经达到了一个地步,当所述扩展被禁用/卸载时,进行一些清理或简单地撤消我的所有更改会很好。

从我在 Mozilla 页面上看到的内容来看,runtime.onSuspend应该可以解决问题。不幸的是,它看起来还没有实现(我在常规的 Firefox 发布频道上)。

换句话说,我想要做的是运行代码作为用户删除/禁用我的扩展的结果,以便我可以清理侦听器等并通常将选项卡恢复到它们的状态,即撤消所有更改进行了扩展。

0 投票
0 回答
82 浏览

firefox - 将新版本的 Firefox 插件上传到 AMO 时不断提示输入“平台”

我有一个现有的 Firefox 附加组件,我最初是在几年前使用 SDK(package.json等)开发的。我使用 WebExtensions( manifest.json等)重写了插件。当我成功测试新版本时,一切正常。

当我去AMO上传新版本时,默认选中“所有平台”。我可以选中或取消选中该框或任何其他平台(Windows、Linux、Mac、Android 等)旁边的框。我选择了要上传的压缩文件,最终显示一条消息,通知我文件已成功上传并成功验证,出现 0 个错误。

但是,文件上传后,所有平台复选框都会自动取消选中。此外,他们都是残疾人。如果我单击该表单上的“添加版本”按钮继续,我只会收到一条错误消息,告诉我“需要至少一个平台”。由于我无法检查任何平台复选框,因为它们现在已被禁用,因此我无法继续。

作为故障排除测试,我继续选择要上传的旧版本文件(使用 SDK 开发的版本)。使用基于 SDK 的文件,我没有遇到取消选中和禁用平台复选框的情况。所以,我不确定 WebExtensions 版本发生了什么。

有没有其他人使用 WebExtensions 体验过这种情况?

0 投票
2 回答
506 浏览

javascript - Get browser locale code in Firefox add-on

I'm developing a Firefox add-on. I need to determine which language is set in the user's browser.
Is there some kind of object like window.navigator, which contains the browser's current locale?

0 投票
1 回答
181 浏览

javascript - Mozilla WebExtension API 存储 - 使用和不使用断点进行调试会导致不同的输出


大家好,
我正在尝试为 Mozilla-Firefox 浏览器实现一个附加组件。以下脚本显示了我已经成功集成的一个背景脚本。它使用 Mozilla WebExtension API 存储。它被执行,但浏览器控制台上的日志让我吃惊。我没有得到交替记录,并且:

当且仅当我在调试模式下的代码的重要行(尤其是最后 5 行)上设置断点时,我总是得到预期的结果:

输出如何取决于设置断点。我不知道发生了什么,并且在互联网上找不到任何类似的问题。有人可以向我解释发生了什么以及我可以做些什么来防止错误的输出吗?

storeManager.js:


清单.json:

0 投票
1 回答
558 浏览

socket.io - 弹出关闭时Socket.IO连接断开

我正在使用 Firefox 48,它应该对于 WebExtensions 是稳定的。我已将我的测试应用程序与 Socket.IO 连接起来。一旦我关闭弹出窗口,socket.IO 连接就会中断。这是代码:

清单.json

main.html

我的客户端.js

我的 nodeJS 服务器代码

如何阻止连接断开?TIA

编辑:也尝试了与 chrome 相同的扩展,因为我在这里读到firefox 不支持background,但连接中断的问题仍然存在。

编辑2:按照安德鲁所说更新了我的代码,仍然不起作用:

我还通过注释该行尝试了上面的代码scripts,但仍然无法正常工作。
bgp.html

如果我从中删除连接的创建myclient.js,则根本不会发生连接!这意味着 bgp.html 不起作用。

0 投票
1 回答
801 浏览

javascript - 将 WebExtension 从 Chrome 移植到 Firefox?

我制作了一个未打包的可用 Chrome 扩展程序,它只是我计算机上的一个目录。我发现我应该能够很容易地将它移植到 Firefox

我按照 MDN 上的“移植 Google Chrome 扩展”指南,发现我的清单文件非常完美。

然后我按照有关如何执行扩展的“在 Firefox 中的临时安装”的说明进行操作。

但是,当我单击目录中的任何文件时,什么也没有发生。扩展不加载。有什么建议吗?我知道该扩展程序在 Chrome 中运行良好,并且加载时不会出错。

清单.json

ChromeFormFill.js

背景.js

Run.js将只是alert('hi').

当我尝试在 Firefox 上加载它时,它不会做任何事情;什么都不会发生。

0 投票
1 回答
1246 浏览

javascript - 在 Firefox 插件弹出窗口中禁用任何对象的拖动

我正在 Chrome / Firefox 上开发一个扩展,它有一个由不同图形元素组成的弹出窗口。我不希望用户从此弹出窗口中拖放这些项目。要在 Chrome 中禁用拖动,我可以使用以下 css 代码:

但这在 Firefox 中不起作用。在这种情况下是否有任何 css 属性可以工作?

这是一个最小版本:https ://drive.google.com/open?id=0B4k6nM18722gNjY5VjVpREhpRTQ