Javascript 从Firefox扩展(XUL)读取网页cookie

Javascript 从Firefox扩展(XUL)读取网页cookie,javascript,firefox,cookies,firefox-addon,xul,Javascript,Firefox,Cookies,Firefox Addon,Xul,我正在为Firefox浏览器创建一个扩展。我想读一个cookie,它是由一个HTML页面在XUL文件中使用JavaScript设置的。可能吗 我尝试使用document.cookie,但不起作用: function readCookie(name) { var ca = document.cookie.split(';'); var nameEQ = name + "="; for(var i=0; i < ca.length; i++) { var c = ca[i]

我正在为Firefox浏览器创建一个扩展。我想读一个cookie,它是由一个HTML页面在XUL文件中使用JavaScript设置的。可能吗

我尝试使用
document.cookie
,但不起作用:

function readCookie(name) {
  var ca = document.cookie.split(';');
  var nameEQ = name + "=";
  for(var i=0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
  return "";
}

function createCookie(name, value, days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function eraseCookie(name) {
  createCookie(name, "", -1);
}
函数readCookie(名称){
var ca=document.cookie.split(“;”);
变量nameEQ=name+“=”;
对于(变量i=0;i

你能帮我吗?提前感谢。

您可能需要使用
nsICookieService
界面:


(通过Mozilla上的有用搜索找到:)

您可能还想查看使用Cookie的现有扩展,例如,至少有两种不同的方法:

首先,如果您只是想与Firefox cookie商店交互,您可以使用和接口来查询、添加和删除cookie

其次,如果您对
document.cookie方法更为熟悉,并且希望处理已经加载到浏览器中的文档,那么您可以这样做,但需要记住的重要一点是,要使用正确的文档。在XUL代码中仅使用
document
时,您指的是与正在运行的浏览器窗口关联的文档对象。此窗口中的不同选项卡中可能会加载多个页面,每个选项卡都有自己的文档对象。因此,您首先需要找到感兴趣的文档对象。例如,这样做的一种方法是注册以获得页面加载的通知,然后在页面加载时检查页面是否感兴趣。例如,您的XUL代码可能如下所示:

function pageLoad (event) {
  if (event.originalTarget instanceof HTMLDocument) {
    var doc = event.originalTarget;

    if (doc.URL.match(/^https?:\/\/[^\/]*\.example\.com\//)) {
      ⋮
      doc.cookie = 'cookie_name' + "=" + value + ";expires=" +
                   (new Date(2050, 10, 23)).toGMTString();
      ⋮
    }
  }
}

var appcontent = document.getElementById("appcontent");  // locate browser

if (appcontent)
  appcontent.addEventListener("load", function (e) { pageLoad(e); }, true);

使用这种方法,您可以使用熟悉的机制仅与与该页面关联的cookie交互,而不用担心处理与完全不同的页面关联的cookie。

这些代码片段可能会有所帮助

///By this method you can iterate throug each cookie by its name or value... 

function ReadCookie()   
{
var cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"]
         .getService(Components.interfaces.nsICookieManager);

for (var e = cookieMgr.enumerator; e.hasMoreElements();) {
 var cookie = e.getNext().QueryInterface(Components.interfaces.nsICookie); 
  dump(cookie.host + ";" + cookie.name + "=" + cookie.value + "\n");

 ///Your code here to check your cookie or your implementation...
 ///You can use cookie name or value to select your cookie...

}
}
///如果你想通过域名读取cookies,你可以使用此代码

function GetCookie(){
try
{
alert("Getting Cookies");
    var ios = Components.classes["@mozilla.org/network/io-service;1"]
            .getService(Components.interfaces.nsIIOService);
var uri = ios.newURI("http://www.yoursite.com/", null, null);

var cookieSvc =
   Components.classes["@mozilla.org/cookieService;1"]
             .getService(Components.interfaces.nsICookieService);
var cookie = cookieSvc.getCookieString(uri, null);

///Your logic here...
}
catch (errorInfo)
{
    alert(errorInfo);
}

}

希望这些能有所帮助:)

谢谢您的回复。这些链接很有用:)谢谢你的回复。您知道如何在xpi格式中查看扩展bcoz的代码吗?您开始遇到一个新问题。。。。一个.xpi刚刚被压缩。用提取器打开它,查看如何创建自己的文件,压缩文件并更改扩展名。