【问题标题】:How can we identify a unique nsHTTPChannel?我们如何识别一个唯一的 nsHTTPChannel?
【发布时间】:2011-10-14 05:35:16
【问题描述】:

我正在使用 javascript 和 C++ 对一些 XPCOM 组件在 firefox 上进行一些开发。
我正在尝试使用nsIHttpActivityDistributor 监控http 活动。

现在的问题是,有没有属于nsIHttpChannelflagid 可以用来识别唯一的nsHttpChannel 对象?

我想在 C++ 中保存一些 nsIHttpChannel 引用的对象,然后在 Javascript 或 C++ 中进行处理。问题是目前我找不到一种elegent方法来识别可以在 js 和 C++ 中使用的通道对象,用于将其清楚地记录到日志文件中。

有什么想法吗?

【问题讨论】:

    标签: javascript c++ firefox mozilla xpcom


    【解决方案1】:

    您可以轻松地将自己的数据添加到 HTTP 通道,它们始终实现 nsIPropertyBag2nsIWritablePropertyBag2 接口。类似这样的东西(未经测试的代码,仅用于说明原理):

    static PRInt64 maxChannelID = -1;
    
    ...
    
    nsCOMPtr<nsIWritablePropertyBag2> bag = do_QueryInterface(channel);
    if (!bag)
      ...
    
    nsAutoString prop(NS_LITERAL_STRING("myChannelID"));
    PRInt64 channelID;
    
    rv = bag->GetPropertyAsInt64(prop, &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: %i\n", channelID);
    

    但是,您可能想检查 HTTP 重定向发生了什么。我认为在这种情况下,频道属性会被复制到新频道,不确定这是否适合您。

    【讨论】:

    • 干得好!我知道 nsIWritableBag 是由 nsIHTTPChannel 继承的,但我之前从未尝试过使用它!非常感谢你!
    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2022-01-19
    • 2015-07-11
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多