Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№117-07-2011 03:18:37

bidlocoder
Участник
 
Группа: Members
Зарегистрирован: 30-09-2010
Сообщений: 52
UA: Firefox 5.0

очистка куков с определенного хоста

доброго времени суток дело вот в чем, к большой радости пользователей и к горю разработчиков mozilla начала просто огромными шагами развивать firefox, конечно это здорово но в связи с этим у я уже не первый раз сталкиваюсь стем что  нововведения очень плохо задокументированы

еще недавно  я  легко пользовался функцией для очистки куков для определенного хоста, типа

Выделить код

Код:

function dchost(host) {
    var cmgr = Components.classes["@mozilla.org/cookiemanager;1"].getService();
    cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
    var enumerator = cmgr.getCookiesFromHost(host);
    var count = 0;
    var showPolicyField = false;
    while (enumerator.hasMoreElements()) {
        var nextCookie = enumerator.getNext();
        nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
        cmgr.remove(nextCookie.host, nextCookie.name, nextCookie.path, false);

    }
}

а вот в 4-5 уже работать не хочет((((((((
какие предложения?

Отсутствует

 

№217-07-2011 03:55:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 5.0

Re: очистка куков с определенного хоста

nsICookieManager2 ?

Причем

Выделить код

Код:

var cm = Components.classes["@mozilla.org/cookiemanager;1"]
    .getService(Components.interfaces.nsICookieManager);
alert("getCookiesFromHost" in cm); // false
var cm2 = Components.classes["@mozilla.org/cookiemanager;1"]
    .getService(Components.interfaces.nsICookieManager2);
alert("getCookiesFromHost" in cm); // Сюрприз :)

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№317-07-2011 03:57:13

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: очистка куков с определенного хоста

bidlocoder пишет

какие предложения?

Для начала - впредь вместо работать не хочет приводить подробное описание того, как работать не хочет: полные сообщения возникающих ошибок, описание ситуации, в которой ошибка возникает, и т.п. Далее: читать MDN. Например, здесь, здесь, и здесь написано, что интерфейсы были last changed in Gecko 1.7 и in Gecko 1.9.2, а FF4.0 и FF5.0 - это Gecko 2.0 и Gecko 5.0 соответственно. В третьих, опять читать MDN: у интерфейса nsICookieManager нет метода getCookiesFromHost, этот метод есть у интерфейса nsICookieManager2. Возможно, раньше в силу каких-то причин QueryInterface при реализации объектом интерфейса выше по иерархии наследования, и при запросе интерфейса ниже по иерархии наследования, отдавал фактический тип (что, по моему скромному, не есть правильно - отдавать надо то, что запрашивают). Вам следует делать вызов QueryInterface с указанием Ci.nsICookieManager2.

Отсутствует

 

№417-07-2011 12:02:17

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: очистка куков с определенного хоста

Кстати, я ради интереса проверил на 3.6.17 (уж что было под рукой) - при QueryInterface(Ci.nsICookieManager) (без 2) возвращаемый экземпляр сервиса имеет фактический тип, соответствующий тому, который запрашивали - т.е. в точности nsICookieManager, и, соответственно, не содержит метода getCookiesFromHost. И заодно наткнулся на один интересный эффект (наблюдается и в 3.6, и в 4.0/5.0). Тест был таков:

Выделить код

Код:

var cmgr = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager);
var console = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
console.logStringMessage(cmgr);
console.logStringMessage("getCookiesFromHost" in cmgr);
console.logStringMessage(cmgr instanceof Ci.nsICookieManager2);
console.logStringMessage(cmgr);
console.logStringMessage("getCookiesFromHost" in cmgr);

И результаты теста таковы:

[xpconnect wrapped nsICookieManager]
false
true
[xpconnect wrapped (nsISupports, nsICookieManager, nsICookieManager2)]
true

- т.е. получается, что вызов на объекте instanceof при возможности приведения типа объекта к типу, на который мы проверяем, эквивалентен вызову на объекте QueryInterface с указанием того типа, на принадлежность к которому мы проверяем - видимо, при проверке система пытается получить от объекта слева интерфейс, указанный справа, и проверить эквивалентность результата; если всё в порядке, то проверяемый объект сохраняет тип, к которому его привели для проверки.

Отсутствует

 

№531-07-2011 21:30:50

bidlocoder
Участник
 
Группа: Members
Зарегистрирован: 30-09-2010
Сообщений: 52
UA: Firefox 5.0

Re: очистка куков с определенного хоста

спасибо всем, как всегда все оказалось очень просто)))

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]