Firefox addon 如何可靠地找到请求';firefox插件中的推荐人?

Firefox addon 如何可靠地找到请求';firefox插件中的推荐人?,firefox-addon,Firefox Addon,我在nsichttpchannel上找到了referer属性,这在大多数情况下都有效,但这只是根据某些安全检查设置的(例如,如果您从HTTPS导航到HTTP URL,则不会设置) 我可以看到有可能获得加载上下文(nsILoadContext),通过它可以获得相关窗口之类的内容,但我找不到一种通过这些窗口查找引用者信息的方法 所以我的问题是,;对于具有引用URL但未通过nsIHttpChannelreferer属性上存在的安全检查的请求,有没有办法获得推荐人信息?Gecko将推荐人保存在docsh

我在
nsichttpchannel
上找到了referer属性,这在大多数情况下都有效,但这只是根据某些安全检查设置的(例如,如果您从HTTPS导航到HTTP URL,则不会设置)

我可以看到有可能获得加载上下文(
nsILoadContext
),通过它可以获得相关窗口之类的内容,但我找不到一种通过这些窗口查找引用者信息的方法


所以我的问题是,;对于具有引用URL但未通过
nsIHttpChannel
referer属性上存在的安全检查的请求,有没有办法获得推荐人信息?

Gecko将推荐人保存在
docshell.internalreferer
属性中,即使在
推荐人
标题未发送的情况下也是如此。在大多数情况下,您应该能够读出以下推荐人信息:

if (channel instanceof nsIPropertyBag)
{
  try
  {
    referrer = channel.getProperty("docshell.internalReferrer");
  }
  catch (e)
  {
    // Internal referrer not set, fall back to the Referer header
    referrer = channel.referrer;
  }
}

这看起来很有用,但nsIHttpChannel不是nsIPropertyBag;当我只有频道的时候,我如何找到这些属性?@Goodwister:是的。HTTP和FTP通道始终实现
nsIPropertyBag
接口。请注意,我使用了
instanceof
运算符,因为。谢谢,这太完美了。请注意,对于其他想要这样做的人,返回的URI可能使用wyciwyg方案;如果要将其用于主机检查等,则需要推断原始URI。