簡體   English   中英

從Firefox擴展(XUL)中讀取網頁cookie

[英]Reading web-page cookies from a Firefox extension (XUL)

我正在為Firefox瀏覽器創建擴展。 我想閱讀一個由HTML頁面在XUL文件中使用JavaScript設置的cookie。 可能嗎?

我嘗試使用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);
}

你可以幫幫我嗎? 提前致謝。

這些代碼段可能會有所幫助

///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...

}
}

///如果您想通過域名閱讀cookie,可以使用此代碼...

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

}

希望這些會有所幫助:)

您可能希望使用nsICookieService接口: https//developer.mozilla.org/en/Code_snippets/Cookies

(通過Mozilla的附加開發人員中心的有用搜索找到: https//addons.mozilla.org/en-US/developers/search? q = coolie

您還可能希望查看使用Cookie的現有擴展程序,例如FireCookie。

至少有兩種不同的方法:

首先,如果您只是想與Firefox cookie存儲庫進行交互,則可以使用nsICookieManagernsICookieManager2接口來查詢,添加和刪除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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM