问题标签 [firefox-addon-bootstrap]

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 回答
109 浏览

firefox-addon - 下载并打开火狐

我是 Firefox 插件系统的新用户。我想创建一个插件,可以在一个 que 中下载多个文件,然后打开它们进行练习。

我的问题是是否有办法在插件中从 Internet 下载文件。我知道 os.file 的存在(尽管从提供的示例中理解如何使用它对我来说并不容易)。接下来我想知道是否有一种方法可以使用默认程序执行文件。

0 投票
2 回答
245 浏览

javascript - 使用 loadFrameScript,如何在页面脚本执行之前注入文件?

我目前在bootstrap.js文件中使用它。在我使用的情况下,用于编辑客户端的 JavaScript 代码recentBrowserWindow.messageManager.loadFrameScript(file, true)

注入.js:

但是这里的脚本inject.js是在客户端页面之后运行的。问题是:

如何inject.js在页面的脚本执行之前注入?我应该使用什么方法?

0 投票
1 回答
1726 浏览

firefox-addon - 在 Firefox 扩展中导入 Javascript 模块

我正在开发一个简单的 Firefox 扩展,但在导入我的自定义 Javascript 模块文件时遇到问题。该bootstrap.js文件位于根目录并test.jsm位于content文件夹内。 test.jsm导出 2 个符号foobar作为:

根据使用 JavaScript 代码模块一文,我已经content在文件中有一条指令chrome.manifest

所以,我应该能够导入test.jsmbootstrap.js

但我在浏览器控制台中看到以下 2 个警告:

我究竟做错了什么?我正在使用 Firefox 39.0。

可以从此处下载示例 XPI 文件。

0 投票
1 回答
134 浏览

javascript - Firefox 扩展:关于 PopupNotifications.jsm 中

我做了一个小的(引导的)扩展来通知我网站上的一些变化。一切都已完成,除了显示通知。

据我了解,无法从扩展访问 HTML5 通知。

然后我用 PopupNotifications.jsm 找到了另一种方法。但是常见的用法示例不起作用,因为"gBrowser is not defined"。此变量用于创建通知。

我不想使用任何外部扩展来处理通知(我发现至少有两个)。我需要一个独立的扩展。

还有另一种方法 - 使用 sdk。但我还没有准备好将它仅用于通知。我想尽可能简单地做我的扩展。

我在这里找到的示例:https ://developer.mozilla.org/en-US/docs/Using_popup_notifications

好的,现在的问题是:以最少的更改将通知添加到我的扩展程序的最佳方法是什么?继续 PopupNotifications.jsm?或者尝试创建nsIDOMDesktopNotification 的实例(但我不知道合适的类名,例如'@mozilla.org/...')。你能给我什么建议?

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 回答
226 浏览

javascript - 在 Firefox 的新隐私浏览窗口中显示空白页面

在 Firefox 42 中,当打开一个新的隐私浏览窗口时,它会显示有关Tracking Protection的信息。如何改为显示空白页?我知道它可以通过override指令来完成,chrome.manifest但我正在寻找一种在 JavaScript 中通过引导加载项(没有 SDK)来完成它的方法。

0 投票
1 回答
60 浏览

javascript - Calling add-on from web page in new multiprocess Firefox

dear all.

We have crypto signing extensions implemented for few browsers in our application, everything went fine, but now we faced problem with new Mozilla's multiprocess API migration (E10S aka Electrolysis).

Our web part interacts with extension which collaborates with native library written in C (we utilize c-types lib for this part).

Now Firefox is moving to multiprocess model that requires code adaptation. The most significant and complicated part for now is content-to-extension communication reimplementation. It was implemented according to related official documentation

We used bootstrap extension initialization in following manner:

This code above was broken with new multiprocess architecture. There are lot of documentation we have read, but still there's no way we could handle this issue.

The question is: how to adapt this code to make extension accept web page invocations?

0 投票
1 回答
146 浏览

javascript - 通过 Firefox 扩展在特定位置打开选项卡

比如说,Firefox 浏览器窗口中有 10 个选项卡。

如何通过 Firefox 扩展代码在第二个选项卡之后添加一个选项卡?

gBrowser.addTab方法仅附加到选项卡列表。

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

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

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

我的用例是这样的:

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

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

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

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

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