0

好吧,我又回来了,关于我的插件部分的另一个问题。

我正在使用观察者来修改通过 javascript 调用的值。

var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(this, "document-element-inserted", false);

我通过观察'document-element-inserted'来做到这一点,这是

在创建文档的根元素之后立即发送,但在对其执行任何脚本之前发送。(来源

调用时,我的插件会修改几个文档/导航器/屏幕值,以通过覆盖 navigator.X 值来减少指纹:

Object.defineProperty(XPCNativeWrapper.unwrap(navigator), "plugins", {
    value: "",
});

在这种情况下,例如插件列表,使它看起来好像我根本没有安装任何插件。

到目前为止,这在我的开发环境/jpm 运行中运行良好。但是,现在我已经创建了一个实际的 xpi,没有任何反应。代码仍然被调用,我在 jSTracking 函数中使用了几个控制台输出,它们都出现在浏览器控制台中。但是,所谓的更改值仍然是原始值。

使用 jpm run 时只有两个错误没有出现:

[异常...“组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]”nsresult:“0x80004005 (NS_ERROR_FAILURE)”位置:“JS 框架 :: resource://gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel /< :: line 667" data: no] (未知)

在安装过程中被抛出两次。

不推荐在内容过程中使用 nsIFile。内容.js:25:17

不推荐在内容过程中使用 nsIFile。NetUtil.jsm:335:12

是不时出现的另一个,尽管与我的脚本无关。

最让我困惑的事情是:为什么 Object.defineProperty 可以与 jpm run 一起使用,但不能与 xpi 一起使用?我必须进行哪些更改才能使其始终有效?

整个项目可以在我的 Github 存储库中找到。

观察者的注册在 pp.js 的第 452 行,

观察功能在第 436-446 行

jsTracking 函数从第 193 行开始,到第 433 行结束

引用的插件示例可以在第 399-403 行中找到

我将不胜感激任何帮助,谢谢!

4

1 回答 1

0

好吧,这比我想象的更容易“修复”。

我在随机浏览 Firefox 主题时,看到提到 e10s/firefox 的多处理器功能,以及并非所有插件都兼容。

用我的标准 Firefox 而不是每晚构建尝试了我的插件,一切都按预期工作。

因此,我的问题得到了解答,我现在只需要担心e10s的兼容性。

我想我会在 bugzilla.mozilla.org 上查找错误报告,看看它是否是我可以轻松修复的东西,或者是否可以添加到他们最终的文档中。

于 2016-04-04T18:24:49.250 回答