2009-10-06 3 views
3

Я создаю расширение для браузера Firefox. Я хотел бы прочитать файл cookie, который был задан HTML-страницей, используя JavaScript в XUL-файле. Является ли это возможным?Чтение веб-страниц cookie из расширения Firefox (XUL)

Я попытался с помощью 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); 
} 

Не могли бы вы мне помочь? Заранее спасибо.

ответ

1

Вы также можете захотеть взглянуть на существующие расширения, которые работают с печеньем, например, FireCookie.

+0

Спасибо за ответ. Знаете ли вы, как увидеть код расширения bcoz в формате xpi – 2009-10-07 14:08:02

+0

, вы начинаете входить в новый вопрос .... .xpi просто застегнут. откройте его с помощью экстрактора и посмотрите http://en.wikipedia.org/wiki/XPInstall, чтобы сделать свой собственный, закрепить файлы и изменить расширение. –

1

Есть по крайней мере два различных способа сделать это:

Во-первых, если вы просто хотите, чтобы между действуйте в магазине cookie Firefox, вы можете использовать интерфейсы nsICookieManager и nsICookieManager2 для запроса, добавления и удаления файлов cookie.

Во-вторых, если вам более удобно использовать подход document.cookie, и вы хотите иметь дело с документами, которые уже загружены в браузере, вы можете это сделать, но важно помнить, что нужно получить правильный документ работайте с. Когда вы просто используете document в XUL-коде, вы ссылаетесь на объект документа, связанный с окном браузера, в котором вы работаете. Несколько страниц могут быть загружены в разные вкладки в этом окне, каждый из которых будет иметь свой собственный объект документа. В результате вам сначала нужно найти объект документа, который вас интересует. Одним из способов сделать это, например, является регистрация для уведомления о загрузке страниц, а затем для просмотра страниц по мере их загрузки, чтобы узнать, являются ли они представляет интерес. Например, код 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); 

С таким подходом вы можете взаимодействовать только с теми печеньем, связанными с этой страницей с использованием механизмов, с которыми вы знакомы, и не заботясь о борьбе с печеньем, связанным с совершенно разные страницы.

14

Эти фрагменты кода могут помочь

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

} 
} 

/// Если вы хотите прочитать куки от имени домена вы можете использовать этот код ...

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

} 

Надеюсь это поможет :)

+0

Спасибо за этот ответ, это замечательно! –

+0

Хороший gupta ji. Поднимите его. – PrateekSaluja

Смежные вопросы