问题标签 [firefox-addon-restartless]

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 投票
1 回答
253 浏览

firefox-addon - Firefox 插件:bootstrap.js mit sdk/page-mod 用于版本 < 38.0

tl;dr:我们使用 Addon SDK 创建了一个 firefox 插件。由于编译插件是大型构建系统中的一步(我们也为 chrome 编译),我们的构建系统手动打包 xpi 并且不使用 jpm。但是,我们使用 jpm 打包插件的内容作为模板来编写我们自己的插件。这仅适用于 firefox >=38。有没有一种简单的方法让它适用于早期版本?

细节:

所以我们打包一个 xpi 文件,其中包含以下 bootstrap.js:

此外,xpi 包含一个带有实际代码的 index.js。这个 index.js 然后为 sdk/page-mod 设置内容脚本。

所以在 bootstrap.js 中,启动/关闭函数被链接到一个 Bootstrap 对象,该对象然后处理插件的启用/禁用。

这在 Firefox 40 中运行良好,但我用 38 之前的版本对其进行了测试,但它不起作用,因为它无法运行 bootstrap.js 脚本。

有没有一种简单的方法让它适用于早期的 Firefox 版本?不幸的是,很难找到这方面的文档。具体来说,我们不想中断启用/禁用插件,即如果用户禁用了插件,那么 page-mod 也应该被禁用(就像 Bootstrap 类那样),并且在启用插件时,它应该是再次启用。

0 投票
0 回答
712 浏览

javascript - 为什么我的自举 Firefox 扩展会导致错误?

我是 Firefox 扩展开发的新手。所以我一直在做一些实验。我目前正在尝试创建一个引导扩展,除了最低要求之外别无其他:只有 install.rdf 和 bootstrap.js。目前,这个扩展实际上不应该做任何事情。我只希望能够安装它而没有任何问题。该功能可以稍后添加。

install.rdf 和 bootstrap.js 已经被打包成一个 7zip 的 .zip 文件,然后文件扩展名被更改为 .xpi。安装是通过插件管理器完成的,似乎在我的 Firefox 42.0 中运行良好(Firefox 给我一条成功消息)。

但是如果我在安装后查看错误控制台,它会显示几个警告/错误:

1447258032068 addons.xpi WARN 为 Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org 加载 bootstrap.js 时出错:打开输入流时出错(文件名无效?):jar:file:///C:/用户/Stefan/AppData/Roaming/Mozilla/Firefox/Profiles/dlgniy94.default/extensions/Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org.xpi!/bootstrap.js

1447258032068 addons.xpi WARN 附加组件 Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org 缺少引导方法卸载

1447258032080 addons.xpi WARN 为 Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org 加载 bootstrap.js 时出错:打开输入流时出错(文件名无效?):jar:file:///C:/用户/Stefan/AppData/Roaming/Mozilla/Firefox/Profiles/dlgniy94.default/extensions/Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org.xpi!/bootstrap.js

1447258032080 addons.xpi WARN 附加组件 Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org 缺少引导方法安装

Zeitstempel:11.11.2015 17:07:12 Fehler:[异常...“组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIURI.hostPort]”nsresult:“0x80004005(NS_ERROR_FAILURE)”位置:“JS 框架 :: 资源: //gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel/< :: line 579" data: no] Quelldatei: resource://gre/modules/PopupNotifications.jsm Zeile: 583

1447258032112 addons.xpi WARN 附加组件 Test-AddOn--53d9108a-541b-4209-a62e-3809504dfe6e@example.org 缺少引导方法启动

我不知道是什么导致了这些错误/警告。尤其是据称缺少的引导方法令人费解。

这是我的 bootstrap.js 的内容:

数量不多,但应该是所需的一切,不是吗?所有四个必需的方法(startup()、shutdown()、install()、uninstall())都在那里。(它们是空的,因为插件不应该做任何事情。)那么为什么我的 Firefox 42.0 认为其中三个丢失了?为什么第四个 (shutdown()) 不这么认为?

当出现多个错误时,为什么安装似乎工作(来自浏览器的成功消息)?

我错过了什么重要的事情吗?

这是 install.rdf:

根据 https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions#chrome.manifest_in_bootstrapped_add-ons 可以使用 chrome.manifest 文件(我认为这意味着它不是必需的)。

如果您有兴趣查看整个插件 .xpi-package,我已将其上传到此处: http ://www.filedropper.com/testaddon

0 投票
1 回答
32 浏览

javascript - 如何在我的无重启 firefox 扩展中交换我的数组文件?更新数组元素而不是整个扩展?

我有一个无需重启的 Firefox 扩展,其中有一个用于某些决策的数组。这个数组的元素可以随时间改变。

目前我有我的bootstrap.js文件,它调用另一个.js文件中存在的各种函数。在这些函数之一中就是这个数组。

我试图弄清楚如何重组我的代码,以便我可以在安装后更新这个数组(不是整个扩展)。

我想到的是;将此阵列拉出到一个单独的.js文件中,并计划在安装后使阵列“更新”时交换它。

但是,我仍然不明白该怎么做。我理解的方式是,我捆绑了我的附加组件,因为.xpi它已安装,然后可以进行部分升级吗?

我不想为此推另一个.xpi。而且我认为这也会让用户意识到扩展程序已经更新。因为,数组更新可能很频繁,这对于每周左右发生的用户更新来说看起来真的很奇怪。

我可以通过一个 API 来执行此操作,该 API 将获取更新的数组并将其交换到代码中(.push对现有数组执行)?基本上,我希望它对用户来说是不可见的并且也是轻量级的。

我怎样才能以更好/正确的方式做到这一点?如果我要的东西目前不可能,请告诉我。

0 投票
0 回答
274 浏览

firefox-addon - 从 Services.jsm 或类似文件中访问 nsIDOMChromeWindow,用于 XUL 到 Add-ons-SDK 的迁移

将旧的附加组件从迁移XULAdd-ons-SDK准备WebExtensions. 仍然希望使用此插件支持一些较旧的浏览器,所以这就是我不直接跳到WebExtensions.

我想做的是控制最小化,最大化全屏和恢复功能。这些似乎是在窗口对象上实现的,因为 FF 45.0,这很棒,但在尝试支持旧浏览器时没有帮助。不确定该功能之前是否存在,或者如何在 XUL 迁移友好的上下文中访问它(步骤 1:使用 Services.jsm)。请参阅从 XUL Overlay 迁移到 Restartless

我能找到的最好的方法是使用Components.interfaces.nsIDOMChromeWindow.windowState属性STATE_*来检测最小化、最大化、正常或全屏状态,然后发出方法minimize()maximize()restore()在同一个对象(nsIDOMChromeWindow)上找到。

但我似乎无法找到加载等价物的精确方法

使用resource://喜欢Services.jsm

例如,旧的附加组件也使用:

后来改名为

后来折叠成

现在可以通过以下方式访问:

有关选项,请参阅MDN 上的 Services.jsm 。

有两件事以nsIDOM*(请求和存储)开头,但似乎不相关,或者有任何通往所需对象的路径。 nsIWindow*(Mediator 和 Watcher) 都有一些方法返回一个类似命名的nsIDOMWindow对象(在 FF 44 中已弃用),包括一个名称容易混淆getChromeForWindow()的方法,但那不是相同的对象,而且确实没有任何所需的状态属性或窗口管理切换方法。

我不确定我在这里缺少什么。这仅仅是开发人员决定为“低级别”并因此拒绝通过 Services.jsm 提供任何高级访问权限的事情之一吗?还是那里有访问权限但文档不完整?还是被记录在案但被埋葬了?或者它是关于某个地方的博客?我只能在所有 StackOverflow 上找到一篇文章,甚至其中有nsIDOMChromeWindow

正如我最初所说,我知道在“旧”样式 XUL/Overlay 以及“新”FF >= 45 中都有一种简单的方法可以做到这一点,但我希望支持中间区域,在至少再过一两年,直到他们完全放弃 XUL。届时,我将准备好 Add-ons-SDK 版本,并且 WebExtensions 正在顺利进行中。

0 投票
2 回答
51 浏览

firefox-addon - jpm 插件无法在插件管理器中显示图标

在 package.json 中,我尝试了使用和不使用 a resource://、 a name、 a GUID、 bothnameGUID、既不name也不GUID、 With {}s、 without {}s、 with @、relative 和 absolute ,假设 ./ (相对)、 / (根)、 /data。

我根本无法让插件管理器显示插件中的图标,即使在安装之后也是如此。我什至无法让 jpmem:iconURLinstall.rdf. 它根本不存在。使用 jpm 在命令行上没有错误。控制台中没有错误,至少没有与我正在做的任何事情有关,至少没有清楚地解释它们与我正在做的任何事情有关。出于演示目的,我已经尝试过。不是一个实际的工作示例。对于我尝试的每种不同格式,我为所有大小的图标(16、32、48、64)放置了相同的格式 URI。

package.json (demo snippet):

绝对没有任何 MDN 文章或任何 SO 答案中描述的技术有效,甚至一次都没有。在所有情况下,Firefox 都会在启动时从网络中提取一个图标。

出于某种原因,XUL 中的一项微不足道的任务(实际上是创建附加组件的最基本任务之一)似乎非常不一致,并且几乎不可能用 jpm 实现,每个人都发誓大约 20-30 种不同的特定仅适用于某些版本的工具或浏览器的技术。

同样,我什至无法在 Action Button 小部件中使用图标,但我会单独询问。似乎与 jpm run 一起使用,但与 jpm xpi 完全不同。

在撰写本文时,我仅在几天前使用jpm 1.0.7了 pull 。git master

0 投票
0 回答
111 浏览

sqlite - SQLite 存储 API 插入语句将整个 firefox 冻结在 bootstrapped(Restartless) AddOn

要插入的数据只有两个 TEXT 列,其单个长度甚至不超过 256。

我最初使用的是executeSimpleSQL因为我不需要得到任何结果。它适用于高达 20K 的同时插入平滑,即在 bakground 中没有观察到滞后或冻结。

然而,在插入过程中,我可以看到 10 万个可怕的冻结。

所以,我尝试了这两个,

  1. 插入 500 条记录的块 - 这效果不佳,因为即使对于 20K 条记录,它也显示出明显的冻结。我什至没有尝试10万。
  2. 所以,我决定去异步并使用 executeAsync 和 Bind 等。这也显示了仅 20K 记录的可见冻结。这是插入的整个数组,而不是块。

    /li>

此外,我似乎在很长一段时间后得到了异步回调。通常,executeSimpleSQL比这快得多。如果我使用 SQLite Manager Tool 扩展立即打开数据库,这就是我得到的(如预期的那样)

SQLiteManager: Error in opening file mydatabase.sqlite - either the file is encrypted or corrupt Exception Name: NS_ERROR_STORAGE_BUSY Exception Message: Component returned failure code: 0x80630001 (NS_ERROR_STORAGE_BUSY) [mozIStorageService.openUnsharedDatabase]

我的主要目标是转储多达 10 万 + 的数据,然后在需要时执行读取。

0 投票
1 回答
108 浏览

javascript - 在 Firefox Restartless Extension 中使用 while 循环是一种很好的等待策略吗?

我有一个引导扩展,它与 Firefox 的 chrome 部分交互(即甚至在内容加载之前),并且需要查询 SQLite 数据库进行一些检查。我更喜欢同步通话。但是,由于同步调用在性能方面很差并且可能导致可能的 UI 问题,因此我需要进行异步 DB 调用。

我的用例是这样的:

  • 对数据库进行aysnc调用
  • 完成后做进一步处理

现在,这可以通过在handleCompletion部分executeAsync功能中放置“进一步处理”部分来轻松处理。

但是,我希望无论是否执行此语句都可以完成“进一步处理”,即此数据库查找可能发生也可能不发生。如果它没有很好地发生,那就继续吧。如果是,我需要等待。所以,我正在使用基于标志的策略;handleCompletionCalled我在handleError&handleCompletion回调中设置了一个标志true

在进一步处理部分,我做了一个

这是一个好策略还是我可以做得更好(我真的不想为此使用观察者等,因为我的整个扩展中有很多这样的情况,我的代码将充满观察者)?

0 投票
1 回答
392 浏览

firefox - 如何在 e10s 插件中获取活动标签 URL

对于工具栏按钮单击,我需要获取活动选项卡的 URL 地址。

得到一个CPOW错误。

如何在 e10s 插件中获取活动选项卡 URL 的 URL 位置?

0 投票
1 回答
895 浏览

javascript - 如何从在 XUL 中运行的脚本中从当前活动的浏览器窗口/选项卡中获取 URL(例如在侧边栏中)

我正在为 Firefox 创建一个简单的引导加载项。我需要通过单击按钮通过侧边栏从浏览器中捕获当前 URL。

我的bootstrap.js

我尝试了从 Firefox 侧边栏扩展获取当前页面 URL 中的所有建议,但没有任何效果。

0 投票
1 回答
77 浏览

firefox-addon - Firefox 附加组件的 maxVersion 未强制执行?

我有一个 Firefox 附加组件(不是通过 AOD 分发),它应该是活动的(在那个版本中)只有 Firefox 50 版以上,cf。这个片段来自我的install.rdf

我的意图是,当用户更新到 Firefox 51 时,该插件将被自动禁用(至少在插件更新之前)。但是,我注意到情况并非如此:即使在 Firefox 重新启动后(无论如何都在更新期间发生),插件仍然处于活动状态。

我做的版本控制有问题吗?