Javascript 使用Firefox加载项SDK读取指定主机的cookie

Javascript 使用Firefox加载项SDK读取指定主机的cookie,javascript,cookies,firefox-addon,firefox-addon-sdk,Javascript,Cookies,Firefox Addon,Firefox Addon Sdk,我正在使用附加SDK开发Mozilla Firefox扩展。在每个选项卡更改事件中,我都要读取在另一个选项卡中打开的指定主机的cookie。我接触到了选项卡更改,但我正试图找出在最近激活的选项卡中获取指定主机的cookies的方法 var tabs = require("sdk/tabs"); tabs.on('activate', function(tab) { // want to get cookies here. }); 在事件处理程序中,您有。选项卡对象有一个属性url,您

我正在使用附加SDK开发Mozilla Firefox扩展。在每个选项卡更改事件中,我都要读取在另一个选项卡中打开的指定主机的cookie。我接触到了选项卡更改,但我正试图找出在最近激活的选项卡中获取指定主机的cookies的方法

var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
    // want to get cookies here. 
});
在事件处理程序中,您有。
选项卡
对象有一个属性
url
,您可以从中获取主机。一旦你拥有了主机,你就可以得到该主机的cookies。你还没有说明你想用它们做什么。所以,这里只是一种列举它们的方法

为了使用一些方法,你还需要要求

更新Firefox的新版本:
注意:至少在Firefox 50.0a2(当前的Firefox开发者版)中,需要使用稍微不同的调用
getCookiesFromHost()
来获取
cookieEnumerator
。在没有更改的情况下,对
getCookiesFromHost()
的调用将在浏览器控制台中显示一条警告消息,指示您访问没有关于警告的更新信息或有关更改的任何文档的。我必须查看源代码以确定需要什么。似乎需要的是传入当前内容
文档
。然而,从背景脚本来看,这似乎不合理。另一种使用它的方式是只传入一个空对象,
{}
。因此,该行更改为:

let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse,{});
它应该用于传递“将被检索的cookie的
原始属性”


上述代码是根据我的。

相关/近似重复代码稍作修改的:在阅读您的问题时,我不清楚您试图从哪个选项卡获取您想要cookie的域。您的代码看起来像是要获取刚刚激活的选项卡的域。您的文字暗示您希望从其他选项卡获取域。是的,我指定的域位于不同的选项卡中,您需要向我们提供更多信息。除此之外,它位于不同的选项卡中,您没有提供关于我们应该如何知道哪个域/选项卡的信息。因此,即使我们遍历所有其他选项卡,我们也不知道如何确定您希望使用哪个选项卡/域。例如,我在20个左右的窗口中打开了300多个不同的选项卡。我们如何知道要使用哪个选项卡/域?这可能不适用于私有浏览窗口、身份容器或第一方隔离(后两者在开发功能中)@the8472,当在私有浏览窗口中使用上述代码时(注意更新的Firefox版本需要更改)将返回在正常浏览期间设置的cookies。它将不会获取可能已为私人浏览窗口传输的cookies。@AshishPatel,我更新了此答案中的代码,因为Firefox源代码中的更改(截至目前尚未记录),导致调用
getCookiesFromHost()的旧代码
在浏览器控制台中弹出警告,告诉您更新代码(请参阅,尚未更新)。请参阅回答中的“更新Firefox的新版本”部分。您不需要文档,只需要原始资料<代码>\u contentPrincipal.origingAttributes
您好。我使用了上述解决方案,它与开发模式配合得很好。但现在我在上传文件时发布我的插件,它显示以下警告。低级或非SDK接口的使用警告:您的加载项使用的接口绕过了加载项SDK的高级保护。应该避免使用此接口,它的使用可能会使您的审核过程变得非常复杂。
let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse,{});