好吧,我又回来了,关于我的插件部分的另一个问题。
我正在使用观察者来修改通过 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 行中找到
我将不胜感激任何帮助,谢谢!