问题标签 [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 投票
2 回答
289 浏览

javascript - Firefox 移动设备的无重启(引导)扩展中的 getElementsByName

我通常是使用 Firefox 进行扩展开发的新手,特别是在移动版本中,我正面临这个让我发疯的问题。

我需要提取具有特定标签名称的元素,例如<iframe><p><script>。自然地,我考虑过使用getElementsByTagName(),但它对我不起作用。此外,我不知道我应该把它放在哪里,因为当我将它链接到门衣架按钮中的功能时,它不起作用。如果我更改为启动功能,它会显示警报窗口,但结果为空(null)。

我真的被困住了,我需要你们的帮助。这里我使用的代码行:

当我按下门架中的按钮时,我只是在警报窗口和敬酒中显示提取元素数组的长度:

0 投票
1 回答
325 浏览

javascript - 如何动态且安全地设置 XUL 密钥?

我正在尝试为我的引导加载项动态创建一个关键元素。目前,我创建一个keyset元素并将其附加到document.getElementById('mainKeyset').parentNodewith appendChild(),然后创建key元素 ( myKey) 并将其附加到keyset. 我设置了key's idmodifierskey属性,然后myKey.addEventListener('command', function() {myFunction()});将函数添加到key. myFunction()在此之后,我可以通过做成功调用myKey.doCommand()。但是,当我按下我在key's 属性中分配的修饰符和键时,什么也没有发生。

我试图避免设置commandandoncommand属性,因为我知道动态设置存在安全问题oncommand,但也许我确实需要以某种方式使用它们?我已经看到它指出,如果没有命令或 oncommand 集,一个键就无法工作,所以如果不设置其中一个键,可能无法动态创建一个键。如果我将 oncommand 设置为“void(0);”,我的事件监听器就会工作 (按照此处给出的示例)。但是,我不知道这样的事情是否可以通过 Mozilla 的扩展审批流程。

0 投票
2 回答
963 浏览

android - 在 bootstrap.js firefox 中包含一个用于 android 扩展的 js 文件

我正在为 android 的 firefox 开发引导扩展,我想将 js 文件导入 bootstap.js(比如在 xul 扩展中导入组件)。引导扩展不允许使用chrome.manifest 使用资源别名的经典方法。我尝试了 Erik Vold 的这段代码,但它似乎不起作用

我真的很感激一些帮助,谢谢。

0 投票
1 回答
538 浏览

android - 如何使用 nsicookieservice 获取 cookie 更改列表

我一直在阅读有关 nsicookieservice 的 MDN 文档,并且对此服务的通知感兴趣:cookie-changed 和 cookie-rejected。这是否意味着我们可以获得更改或拒绝的 cookie 的列表?通过这样做可以做到吗:

谢谢你的解释。

我重新阅读了文档(我真的这样做了)并在许多扩展的源代码中进行了搜索。我正在构建的扩展是为 android 的 firefox 启动但我没有使用 SDK 的问题。根据我的理解,我写了这个:

然后我这样做是为了在加载页面时添加观察者:

这不起作用,我在 logcat 中没有发现任何让我更加困惑的错误。我真的被困住了,我需要你的帮助。

0 投票
2 回答
1600 浏览

javascript - .gBrowser 未定义

我正在编写一个无需重启的 Firefox 扩展,我必须在其中枚举所有打开的选项卡并使用它们。

这是引发错误的代码部分:

我在测试这个时运行了一个 JavascriptDebugger-Addon,Firefox 执行一切正常

但是在这一行之后,调试器插件会抛出一个错误,说:

win.gBrowser 未定义

...指向线:

但在它引发错误之前,我得到了我的警报消息,它给了我正确数量的选项卡。因此,在执行该行之后会引发错误,而不是在执行该行时直接引发错误。有谁知道如何解决这个问题,因为在引发错误后扩展程序停止工作。

格雷茨

PS:如果有人对此有更好的标题,请随时编辑。

0 投票
2 回答
372 浏览

firefox-addon - 自举Firefox插件中的自定义协议处理程序

我正在编写一个引导 Firefox 插件并且需要注册一个新的协议/模式处理程序(例如foo:somthing)。我已经看了一遍,我只看到了使用的方法chrome.manifest,而引导加载项不能使用。

那么,有没有人知道一种方法或者是否可以在引导加载项中注册自定义协议处理程序?

0 投票
1 回答
230 浏览

dom - 可以在无重启插件中使用 loadOverlay() 吗?

火狐插件。我正在将一个现有的插件移植到一个无需重启的插件上。我有一个面板,里面有很多 UI 元素(主要是框/描述和图像),在 XUL 覆盖文件中定义面板元素对我来说非常方便。如果我不这样做,我会有很多臃肿的 js 代码。

面板元素(父元素)本身是在代码中动态创建的,然后我使用loadOverlay, 等待“合并”事件,然后从覆盖的文档中附加面板元素的子元素。我还确保在删除时清理元素。

但是,使用叠加层很可能无法通过 AMO 审查。我认为的一些原因是:

  • 在大多数情况下,覆盖元素会在删除时引起问题(例如:工具栏按钮记住它们的位置等)
  • 在覆盖文件中附加 js/css 文件存在问题。
  • loadOverlay 有问题496320、330458

这是我的推论:

  • loadOverlay() API 本身并没有被弃用——事实上它“没有被冻结,以后可能会改变”——这意味着它将来可能会可用。
  • 第二次覆盖加载失败的错误不适用于我的情况,因为我不会在没有覆盖合并的情况下进行初始化。
  • 到目前为止,对偏好窗口等使用静态覆盖是完全可以接受的。
  • 在我的情况下,面板的行为很像首选项窗口(按需显示并在删除插件时清理)
  • 我没有附加到覆盖层的任何 js/css,也没有任何元素的事件侦听器。覆盖仅用于定义框和描述文本 - 仅此而已。

因此,考虑到这些,是否可以将叠加层和 loadOverlay() 用于无重启插件?如果没有,是否有替代方案?

0 投票
1 回答
637 浏览

file-io - 如何从引导插件中使用 TextEncoder 和 TextDecoder

在 OS.file 示例之后,它使用 TextEncoder 但是从引导范围来看这是不可用的。

https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread#Example.3A_Read_the_contents_of_a_file_as_text

我可以访问它的唯一方法是去,decoder = new Services.appShell.hiddenDOMWindow.TextDecoder();但这是唯一的方法吗?

0 投票
1 回答
392 浏览

javascript - Bootstrap 将按钮添加到 BrowserPalette 并使其持久化

我对某事感到好奇。我可以向 BrowserPalette 添加一个按钮,然后使用此代码将其移动到工具栏,可以将粘贴复制到暂存器并运行。

但是doc.persist不起作用,一旦我重新启动浏览器,按钮就消失了。是否可以使用persist 在第一次引导插件时添加一个按钮并让它保持不变?

这也导致了如何删除按钮并坚持下去的问题?(即在卸载时从调色板中完全删除,另一个即:只需从工具栏中删除,换句话说,只需将其发送回调色板并坚持下去)

我从这里得到了持久化代码: https ://developer.mozilla.org/en-US/Add-ons/Code_snippets/Toolbar#Adding_button_by_default

0 投票
2 回答
334 浏览

javascript - 在无重启扩展中与 jsctypes 异步工作

我有一个小的引导扩展,它加载一个 dll 文件startup()并将其保存在一个全局变量中。我不知道如何正确使用它,也许你会纠正我,但我更想知道我从 dll 文件中使用的函数是否可以异步调用。

现在我正在做的是:

一旦我有someFunc我经常在代码中使用它,但调用需要很长时间。有没有办法异步调用它?或者以 Firefox 在通话期间不会冻结的方式调用它?