2009-08-18 83 views
0

我已经编写了一个Firefox扩展,可以捕获何时输入特定URL并执行某些操作。我的主应用程序通过此URL启动Firefox。该网址包含敏感信息,所以我不希望它被存储在历史记录中。书签如何访问Firefox扩展(或反之亦然)

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

我将推出Firefox浏览器 “的javascript:window.location.href = 'pleaseinstallthisplugin.html'; sensitiveinfo = 'blahblah'”。

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

我的问题是,可以在书签调用扩展的方法来传递敏感信息(如果有的话,怎么样),也可以扩展捕获JavaScript时被调用的书签?

Bookmarklet和Firefox扩展如何通信?

p.s.解决这种情况的另一种方法是让我的主应用程序启动Firefox并使用套接字与扩展进行通信,但我不愿意这样做,因为多年来我遇到了太多问题,因为用户使用疯狂防火墙阻止套接字通讯。如果可能的话,我想尽一切办法避免套接字。

回答

1

据我所知,书签工具不能使用Chrome浏览器文件(扩展名)。

1

小书签在当前文件,这是几乎总是一个内容文件的范围执行。但是,如果你是在通过命令行传递它,它似乎工作:

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

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

+0

尽管您可以访问组件对象,但它看起来像试图访问该对象上的任何有用的方法/属性,例如类或QueryInterface()会拒绝您的权限。所以我想这是不可能的。 – mhenry1384 2009-08-19 15:31:05

1

你可以使用unsafeWindow注入一个全球性的。您可以添加一个纯属性,以便您的小书签只需检测全局是否已定义,但您应该知道,据我所知,无法禁止非书签小节中的网站同时嗅探对于同样的全球(因为它可能是一些网站可以检测他们是否使用扩展的隐私问题)。我已经在我自己的插件中进行了确认,该插件以类似于下面的方式注入了全局插件,它可以在小书签和常规站点上下文中工作。

如果您注册一个nsIObserver,例如,其中content-document-global-created为主题,然后解开了subject,你可以注入全局(见this如果你需要注入一些更复杂的像与方法的对象)。

下面是一些(未经测试)代码应该做的伎俩:

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); 

thisthis如果你想在一个SDK的显然更简单的方式附加(不知道SDK postMessage通信是否会工作作为替代方案,但显然同样的担忧是,这也会暴露给非书签上下文(即常规网站)。

+0

我喜欢这篇文章感谢分享Brett,但为什么'''content-document-global-created'''而不是''document-element-inserted'''观察主题? – Noitidart 2014-03-04 05:36:49

+0

没理由 - 也许那会更好... – 2014-03-04 06:29:57

+0

啊。你能帮我理解它在做什么,比如什么能让它变得更好?你知道content-document-global-created的主题是什么吗?它究竟做了什么?在执行脚本之前是否设置了JavaScript?当没有文档元素插入的时候,你甚至不能在那个时候访问dom。如果你需要插入JavaScript为什么使用观察者?为什么不去'''gBrowser.contentWindow.wrappedJSObject.myGlobal = true'''? – Noitidart 2014-03-04 06:37:54