0

我编写了一个 Firefox 扩展程序,它可以捕获输入特定 URL 并执行一些操作。我的主应用程序使用此 URL 启动 Firefox。该 URL 包含敏感信息,因此我不希望将其存储在历史记录中。

我担心未安装扩展程序的情况。如果它没有安装并且 Firefox 使用敏感 URL 启动,它将被存储在历史记录中,我对此无能为力。所以我的想法是使用书签。

我将使用“javascript:window.location.href='pleaseinstallthisplugin.html';sensitiveinfo='blahblah'”启动 Firefox。

如果未安装扩展程序,他们将被重定向到告诉他们安装它的页面,并且敏感信息不会存储在历史记录中。如果安装了扩展程序,它将获取敏感信息变量中的信息并执行其操作

我的问题是,小书签可以调用扩展程序中的方法来传递敏感信息(如果是,如何)或者扩展程序可以在小书签中调用 javascript 时捕获?

小书签和 Firefox 扩展如何通信?

ps 解决这种情况的另一种方法是让我的主应用程序启动 Firefox 并使用套接字与扩展程序通信,但我不愿意这样做,因为这些年来我遇到了太多问题,因为用户有疯狂的防火墙阻止套接字通信。如果可能的话,我想在没有套接字的情况下做所有事情。

4

3 回答 3

1

据我所知,书签永远无法访问 chrome 文件(扩展名)。

于 2009-08-18T21:31:20.503 回答
1

书签在当前文档的范围内执行,该文档几乎总是内容文档。但是,如果您通过命令行传递它,它似乎可以工作:

/Applications/Namoroka.app/Contents/MacOS/firefox-bin javascript:alert\(Components\)

Components如果不允许访问,则会抛出异常,但警报会显示正确的对象。

于 2009-08-19T01:26:45.500 回答
1

您可以使用unsafeWindow注入全局。您可以仅添加一个属性,以便您的书签只需要检测是否定义了全局,但您应该知道,据我所知,没有办法禁止非书签上下文中的站点也嗅探对于同一个全局(因为它可能是一些网站可以检测到他们是否正在使用扩展程序的隐私问题)。我已经在我自己的插件中确认,它以类似于下面的方式注入全局变量,它确实可以在书签和常规站点上下文中工作。

如果您注册一个nsIObserver,例如,content-document-global-created主题在哪里,然后解开subject,您可以注入您的全局(如果您需要注入更复杂的东西,例如带有方法的对象,请参阅此内容)。

这是一些(未经测试的)代码应该可以解决问题:

var observerService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
observerService.addObserver({observe: function (subject, topic, data) {

    var unsafeWindow = XPCNativeWrapper.unwrap(subject);
    unsafeWindow.myGlobal = true;

}}, 'content-document-global-created', false);

如果您想在 SDK 附加组件中使用一种明显更简单的方法,请参阅thisthis(不确定 SDKpostMessage通信是否可以作为替代方案,但显然同样担心这会暴露于非书签上下文(即常规网站)以及)。

于 2014-03-04T00:18:52.930 回答