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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№126-02-2007 18:10:27

vovk
Участник
 
Группа: Members
Зарегистрирован: 23-02-2007
Сообщений: 6
UA: Firefox 2.0

HistoryList

Прошу прощения, не можете ткнуть носом в интерфейс/класс, который бы давал возможность получить список истории, т.е. сайтов, где был пользователь в последнее время. У всех просмотренных мною интерфейсов я не нашел никаких методов для перечисления или выдачи элементов истории по номеру. Из прочитанного же здесь: http://developer.mozilla.org/en/docs/Places:Query_System кажется, что такая возможность вообще будет доступна только начиная с третьей версии. Я прав или что-то просмотрел?

Отсутствует

 

№226-02-2007 18:44:48

vovk
Участник
 
Группа: Members
Зарегистрирован: 23-02-2007
Сообщений: 6
UA: Firefox 2.0

Re: HistoryList

Дополнение.
Что-то начало проясняться, но в результате выполнения следующего кода:

Выделить код

Код:

void printerror(nsresult* rv){
	switch(*rv){
		case NS_ERROR_NOT_INITIALIZED:
			printf("Returned when an instance is not initialized.\n");
			break;
		case NS_ERROR_ALREADY_INITIALIZED:
			printf("Returned when an instance is already initialized.\n");
			break;
		case NS_ERROR_NOT_IMPLEMENTED:
			printf("Returned by an unimplemented method.\n");
			break;
		case NS_ERROR_NO_INTERFACE:
			printf("Returned when a given interface is not supported.\n");
			break;
		case NS_ERROR_NULL_POINTER:
			printf("Returned when a valid pointer is found to be nsnull.\n");
			break;
		case NS_ERROR_FAILURE:
			printf("Returned when a method fails. Generic error case.\n");
			break;
		case NS_ERROR_UNEXPECTED:
			printf("Returned when an unexpected error occurs.\n");
			break;
		case NS_ERROR_OUT_OF_MEMORY:
			printf("Returned when a memory allocation fails.\n");
			break;
		case NS_ERROR_FACTORY_NOT_REGISTERED:
			printf("Returned when a requested class is not registered.\n");
			break;
		default:
			printf("Unspecified error.\n");
			break;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	nsresult rv0 = NS_InitXPCOM2(nsnull, nsnull, nsnull);
	if (NS_FAILED(rv0)){
		return -1;
	}

    nsCOMPtr<nsICookieService> cookieService = do_GetService(kCookieServiceCID, &rv0);
	if (NS_FAILED(rv0)){
		printerror(&rv0);
		return -1;
	}


	nsCOMPtr<nsINavHistoryService> nsINavHistoryService =  do_GetService("@mozilla.org/browser/nav-history-service;1", &rv0);
	if (NS_FAILED(rv0)){ 
		printerror(&rv0); 
		return -1;  // ВЫХОДИМ ЗДЕСЬ С ОШИБКОЙ "Returned when a method fails. Generic error case."
	}

  return 0;
}

происходит ошибка. Не подскажете, в чем может быть причина? Получение кукисервиса же происходит нормально.

Отсутствует

 

№327-02-2007 09:44:14

Tearis
Участник
 
Группа: Members
Откуда: Воронеж
Зарегистрирован: 18-12-2005
Сообщений: 115
UA: Firefox 2.0

Re: HistoryList


Кому ничего не надо, с того нечего и потребовать.
©Генри Филдинг

Отсутствует

 

№427-02-2007 11:48:12

vovk
Участник
 
Группа: Members
Зарегистрирован: 23-02-2007
Сообщений: 6
UA: Firefox 2.0

Re: HistoryList

Спасибо.
Но что-то я не пойму, чем это мне поможет. Ведь нужен ведь именно nsINavHistoryService. Я так понял, нужно зарегистрировать соответствующий компонент - nsINavHistoryService.xpt. Но вот соответствующей dll-ки для него не нашел.
Никто не шел этим путем?

Отсутствует

 

№527-02-2007 17:34:56

vovk
Участник
 
Группа: Members
Зарегистрирован: 23-02-2007
Сообщений: 6
UA: IE 7.0

Re: HistoryList

Поскольку толкового я ничего так и не смог придумать, опишу проблему более подробно.
Есть у меня проинсталлированная мозилла версии 2.0.0.1. Когда я запускаю из ее директории программу, содержащую кусок кода, данный в первом посте, получаю следующее сообщение:

Выделить код

Код:

nsCOMPtr<nsINavHistoryService> nsINavHistoryService =  do_GetService("@mozilla.org/browser/nav-history-service;1", &rv0);
    if (NS_FAILED(rv0)){ 
        printerror(&rv0); 
        return -1;  [i]// ВЫХОДИМ ЗДЕСЬ С ОШИБКОЙ "Returned when a requested class is not registered."[/i]    }

Далее, есть у меня мозилла той же версии (2.0.0.1), для которой я сделал make (отключил в опциях дебаг и инсталлятор, а также включил place'ы). Когда я запускаю тот же код теперь уже в этой директории, то получаю следующее:

Выделить код

Код:

nsCOMPtr<nsINavHistoryService> nsINavHistoryService =  do_GetService("@mozilla.org/browser/nav-history-service;1", &rv0);
    if (NS_FAILED(rv0)){ 
        printerror(&rv0); 
        return -1;  [i]// ВЫХОДИМ ЗДЕСЬ С ОШИБКОЙ "Returned when a method fails. Generic error case."[/i]    }

Не могу понять, что и где нужно регистрировать.

Далее, есть также следующий код, который, как я подозреваю, не совсем корректен, но как написать лучше - не знаю (напомню, что моей целью есть возможность добраться до history и делать к этой истории произвольные запросы):

Выделить код

Код:

nsNavHistory* nsNH  = new nsNavHistory();
	nsNH = nsNH->GetHistoryService();

	rv0 = nsNH->Init();
	if(NS_FAILED(rv0)){
		return -1;  [i]// Ошибка здесь, т.е. инициализация не происходит[/i]	}

Ошибка происходит в модуле nsDirectoryServiceUtils.h метод NS_GetSpecialDirectory на строке

Выделить код

Код:

return serv->Get(specialDirName, NS_GET_IID(nsIFile),
                     NS_REINTERPRET_CAST(void**, result));

Точнее, тут еще не ошибка, но, поскольку *result указывает на null, то она ведет к завершению вызывающей функции.

Я не смог установить (не стал, не знаю, нужно ли), с чем это связано, возможно, с тем, что specialDirName имеет неподходящее значение.

С одной стороны, использование именно класса для меня было бы предпочтительнее, поскольку это дало бы возможность вообще не регистрировать никаких компонент (и не полагаться на то, что они уже зарегестрированы). Но не совсем ясно, не будет ли проблем с совместным доступом (поскольку этот класс - nsNavHistory, нужно использовать, насколько я понял, только через фабрику; но я, к сожалению, не нашел способа это сделать). Отсюда вопросЖ стоит ли так делать и, если да, то как это сделать корректно (учитывая также и то, что пути к файлам истории для разных версий могут отличаться).

С другой стороны, я бы все-таки пошел по пути получения уже реализованного интерфейса. Но кто скажет - как его получить, что для этого нужно зарегистрировать и как это заставить работать?

Отсутствует

 

Board footer

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