#javascript #c #firefox #mozilla #xpcom
#javascript #c #firefox #mozilla #xpcom
Вопрос:
Я занимаюсь некоторой разработкой в firefox как с помощью javascript, так и C для некоторых компонентов XPCOM.
Я пытаюсь отслеживать активность http с nsIHttpActivityDistributor
помощью .
Проблема сейчас в том, есть ли какие-либо flag
или id
, которые принадлежат nsIHttpChannel
, которые я могу использовать для идентификации уникального nsHttpChannel
объекта?
Я хочу сохранить некоторые nsIHttpChannel
упомянутые объекты на C , а затем обработать позже на Javascript или C . Дело в том, что в настоящее время я не могу найти элегантный способ идентификации объекта канала, который может использоваться как в js, так и в C , который используется для его четкой регистрации в файле журнала.
Есть идеи?
Ответ №1:
Вы можете легко добавлять свои собственные данные в HTTP-каналы, они всегда реализуют nsIPropertyBag2
и nsIWritablePropertyBag2
интерфейсы. Что-то в этом роде (непроверенный код, просто для иллюстрации принципа):
static PRInt64 maxChannelID = -1;
...
nsCOMPtr<nsIWritablePropertyBag2> bag = do_QueryInterface(channel);
if (!bag)
...
nsAutoString prop(NS_LITERAL_STRING("myChannelID"));
PRInt64 channelID;
rv = bag->GetPropertyAsInt64(prop, amp;channelID);
if (NS_FAILED(rv))
{
// First time that we see that channel, assign it an ID
channelID = maxChannelID;
rv = bag->SetPropertyAsInt64(prop, channelID)
if (NS_FAILED(rv))
...
}
printf("Channel ID: %in", channelID);
Однако вы можете проверить, что происходит при перенаправлении HTTP. Я думаю, что в этом случае свойства канала копируются на новый канал, не уверен, желательно ли это для вас.
Комментарии:
1. Классная работа! Я знаю, что nsIWritableBag наследуется nsIHTTPChannel, но я никогда не пытался использовать его раньше! Большое вам спасибо!