2009-10-06 4 views
3

Je crée une extension pour le navigateur Firefox. Je voudrais lire un cookie qui a été défini par une page HTML en utilisant JavaScript dans le fichier XUL. C'est possible?Lecture de cookies de pages Web à partir d'une extension Firefox (XUL)

J'ai essayé d'utiliser document.cookie, mais il ne fonctionne pas:

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

Pourriez-vous me aider? Merci d'avance.

Répondre

1

Vous pourriez aussi vouloir regarder les extensions existantes qui fonctionnent avec les cookies, tels que FireCookie.

+0

Merci pour la réponse. Savez-vous comment voir le code d'une extension bcoz son au format xpi –

+0

vous commencez à entrer dans une nouvelle question .... un .xpi est juste compressé. ouvrez-le avec un extracteur, et regardez http://en.wikipedia.org/wiki/XPInstall pour créer votre propre fichier, compresser les fichiers et modifier l'extension. –

1

Il y a au moins deux façons distinctes de le faire:

Tout d'abord, si vous voulez simplement entre agir avec le magasin de cookies Firefox, vous pouvez utiliser les interfaces nsICookieManager et nsICookieManager2 pour interroger, ajouter et supprimer des cookies. Deuxièmement, si vous êtes plus à l'aise avec l'approche document.cookie, et que vous voulez traiter des documents qui sont déjà chargés dans le navigateur, vous pouvez le faire, mais la chose importante à retenir est d'obtenir le bon document travailler avec. Lorsque vous utilisez simplement document dans le code XUL, vous faites référence à l'objet document associé à la fenêtre du navigateur dans lequel vous exécutez. Plusieurs pages peuvent être chargées dans différents onglets dans cette fenêtre, chacune ayant son propre objet document. Par conséquent, vous devez d'abord trouver l'objet de document qui vous intéresse. Une façon de le faire, par exemple, est de s'enregistrer pour être averti des chargements de pages, puis d'examiner les pages au fur et à mesure qu'elles sont chargées. d'intérêt. Par exemple, votre code XUL pourrait ressembler à ceci:

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

Avec cette approche, vous pouvez interagir avec seulement ces cookies associés à cette page en utilisant les mécanismes avec lesquels vous connaissez, et sans se soucier de traiter avec les cookies associés à pages complètement différentes.

14

Ces extraits de code peuvent aider

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

} 
} 

/// Si vous voulez lire les cookies par nom de domaine, vous pouvez utiliser ce code ...

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

} 

espère que ces aidera :)

+0

Merci pour cette réponse, c'est merveilleux! –

+0

Bon gupta ji.Keep it up. – PrateekSaluja

Questions connexes