问题标签 [e10s]
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.
javascript - 如何在 Firefox Electrolysis 窗口中获取 document.popupNode
我正在尝试为 Firefox Electrolysis 编写附加组件。当我打开 e10s 窗口并右键单击页面元素时,document.popupNode 不适用于 e10s 窗口。
您可以在 Scratchpad 中使用测试代码。运行测试代码后,打开一个新的普通 Firefox 窗口并在网页内单击鼠标右键。document.popupNode 出现提示警报。
但是如果打开一个新的 e10s Firefox 窗口并单击鼠标右键,它不会显示任何内容。
如何在 e10s 窗口中获取 document.popupNode?
firefox-addon - Firefox e10 中的窗口是否有不同的进程 ID?
Firefox e10s中的新窗口会有一个共同的 PID 还是不同的?新标签肯定有不同的 PID,我知道。
不同配置文件的窗口会有不同的 PID 吗?
javascript - 如何在启用 e10s 的 Firefox 中从框架脚本中获取页面信息?
我有一个 Firefox 扩展,可以在如下函数中加载页面信息:
当用户选择我的扩展创建的上下文菜单项时,此函数运行。由于多进程 Firefox(电解,又名 e10s)不支持直接访问内容,这不再有效。我正在尝试将此代码分解为框架脚本,但在弄清楚如何“调用”此代码时遇到问题,因为一切似乎都是异步的。这是我认为应该是我的简单框架脚本的内容:
我认为相关的 chrome 代码应该如下所示:
我遇到的问题是我不完全理解(a)这是处理这个问题的正确方法,还是(b)这里的时间是如何计算的。由于这个消息传递系统是异步的,我不能保证我感兴趣的数据会及时返回以供我使用。Mozilla 提供的示例似乎都不适合我正在尝试做的事情。我错过了一些明显的东西吗?是否有更好的示例展示如何转换扩展代码以支持 e10s?
javascript - 何时加载浏览器框架脚本 (e10s)?
我正在尝试移植我的 Firefox 扩展之一以支持电解(e10s)。我的扩展程序抓取一些页面数据并通过用户可以单击的上下文菜单项将其放在剪贴板上。根据消息管理器文档,有 3 种类型的消息管理器可用:
- 全球的
- 窗户
- 浏览器
由于我的附加组件是特定于上下文的,所以最后一个似乎是我想要使用的。问题是我不完全知道何时加载框架脚本。我的上下文菜单项的操作处理代码的简化版本如下所示:
在这里加载框架脚本对我来说似乎是最好的主意,因为 (a) 框架脚本不能保证在每个页面上都使用,并且 (b) 我认为框架脚本只加载一次,并且每个<browser>
. 第二个理论似乎不正确;每次我打电话时loadFrameScript
,都会加载一个新副本。甚至负载保护逻辑(即仅在框架脚本函数不存在的情况下创建它们)似乎也无法解决问题。
所以,我的问题是每次访问上下文菜单项时,都会加载框架脚本的新副本。而且由于我的框架脚本添加了一个消息侦听器,因此在后续调用上下文菜单项时会收到重复的消息。
我应该什么时候加载浏览器框架脚本?在加载项初始化时加载一次似乎效果不佳,因为它仅在第一次加载<browser>
(我希望此代码在任何后续请求时执行<browser>
)。但是按需加载它似乎重复了一些事情。
我在这里还缺少其他策略吗?
firefox - 创建Firefox的内容进程(e10s)时如何加载XPCOM组件?
我正在尝试nsIURIFixup
通过 Firefox 插件覆盖 Firefox 的默认实现。因为这个服务是创建一次,然后在构建后全局缓存,所以我必须nsDocShell
在初始化任何 docshell 之前注册我的组件。因此,我使用chrome.manifest
注册我的(JS)XPCOM 组件,包括profile-after-change
让组件尽快加载的类别。
这在单进程 Firefox (37) 中运行良好,但在启用电解 (e10s) 时(例如在 Firefox Nightly 中)则不行。这个问题是由于插件chrome.manifest
仅在 Firefox 的浏览器进程中导入,而不是在激活 e10s 时其内容进程(错误 596880,标记为 WontFix)。
通过在调用. registerFactory
_ nsIComponentRegistrar
这可能适用于大多数应用程序,但不适用于我的,因为我的组件必须在构建 docshell 之前初始化,并且看起来框架脚本加载得太晚(即当 docshell 已经构建时)。
我还探索了实现我的功能的其他方法,例如跟踪和猴子修补接口的(间接)消费者。我不喜欢这种脆弱的“解决方案”,因为它依赖于未记录的实现细节,因此可能在未来的任何时候中断。
我还想到我可以将我的组件附加到 Firefox 的 global chrome.manifest
,但这似乎也是一个可怕的黑客攻击(如果这个文件是只读的,例如因为它是由管理员安装的呢?AMO 的几率是多少?接受修改 Firefox 的核心文件之一作为其安装的一部分的附加组件...?)。
那么,如何正确注册一个在创建内容进程后立即加载的组件,以便它可以有效地覆盖该进程中的接口实现?
javascript - 在多进程 Firefox 中打开新标签页?
我正在尝试将现有的 firefox 插件代码移植到新的多进程架构中。在我现有的代码中,我可以addon install event
使用以下代码启动一个新选项卡:
在对 bootstrap.js 进行更改以使其multiprocess firefox
兼容(使用其他扩展程序代码的帮助)后,插件会按预期加载和运行,但上述代码无法加载新选项卡,并且控制台中不会显示错误!!!
firefox - 如何在框架脚本中注册内容策略 (nsIContentPolicy)?
在 e10s 中,我们必须直接在框架脚本中注册内容策略,但我找不到任何有效的示例。我已经测试了这段代码,但它只检测到何时加载内部资源,并给出以下错误:
有人知道该怎么做吗?
firefox - require("sdk/selection").text 现在它在 e10s 中不起作用。用什么来代替它?
require("sdk/selection").text
目前它在 e10s 中不起作用。
我尝试activeTab.attach
和port
s,window.getSelected.toString()
但这非常缓慢。
用什么来代替它?
e10s - e10s - 我想从 nsIObserver-nsIHttpChannel-nsIDOMWindow-nsIDOMDocument 获取。我该怎么做?
我的插件在 FF41 上工作。现在我想在 e10s 上迁移。使用 Firefox 开发者版 v43。
示例观察者 (c++)。
示例 JS 助手。
Channel_GetOwnerWindow:
下面的代码有效,但我无法通过获取 nsIDOMWindow 获取文档。
是错误 - 没有接口....
Channel_GetOwnerWindow:
请帮我解决这个问题。谢谢。
firefox - drawWindow() 被多进程 Firefox (e10s) 破坏?
Firefox drawWindow()
-Function 需要一个XUL 内容窗口作为第一个参数,由低级 api选项卡 utils提供。
然而,随着 Firefox(代号为电解或 e10s)中引入多进程架构,直接通过低级 api 访问选项卡不再可能。虽然有可用的兼容性填充程序,但明确指出它们不支持需要 DOM 对象的平台 API。另一方面drawWindow()
,不能在内容脚本中使用,因为它是“仅限 chrome”。
所以我的问题是:
drawWindow()
如果我不能在 chrome 之外使用它并且不能在 chrome 中获取 contentWindow-object,我应该如何使用它?- 我还有哪些其他选项可以让我的插件在多进程 Firefox 中截取网站截图?
我们目前的方法是基于对这个 SO question 的回答。但是它不适用于多进程 Firefox