如何从NPAPI插件获取浏览器代理,而不使用xpcomglue?

时间:2011-02-08 23:37:56

标签: firefox plugins xpcom npapi npruntime

我正在开发一个插件,我需要获取给定的浏览器代理 主机。

现在它可以使用 nsIProtocolProxyService 。但是, NewURI function(需要构造一个URI对象,由...使用) nsIProtocolProxyService :: resolve())接受一个const引用 nsACString 。它看起来像任何具体的实现 我需要链接 xpcomglue ,这是我无法做到的(如果我理解的话) 对,我不应该为techincal动态链接 原因;并且我无法静态链接xpcomglue_s以获得合法性 原因)。

那么,如何在不与xpcomglue 链接的情况下获取浏览器代理

2 个答案:

答案 0 :(得分:2)

这绝对是一个棘手的问题。实际上,最好的方法(如果可能)是尽可能使用NPN_GetURL / NPN_PostURL样式的NPAPI函数。如果那是不可能的,除非你可以依赖最近的浏览器版本,否则你或多或少会上一条小溪。

如果你可以假设最近版本的Firefox / gecko API(我很确定Firefox 3.6支持这个,但不确定哪个开始; docs说gecko SDK 1.9,但我认为它不存在那个时候)然后你可以使用NPN_GetValueForURL和NPNURLVProxy来获取给定URL的代理信息。

同样,请记住,这只适用于较新的浏览器,而且我还没有机会在支持它的内容上编译兼容性矩阵;我计划将其添加到FireBreath,但它没有进入1.4,所以可能是在我达到它之前的另一个月。

作为故障转移选项,如果不可用,最常见的解决方案是简单地获取WinInet(Internet Explorer)的代理配置,并相信它将是相同的。

这是(IMO)一个重要问题,没有一个非常好的修复。这就是众所周知,Flash在代理服务器上进行网络访问时也是如此变幻无常。

答案 1 :(得分:0)

您不应该开发使用XPCOM的NPAPI插件;见Mozilla's docs。也许你可以使用Firefox扩展至少部分你正在尝试做的事情,并使用JS绑定在它和你的插件之间进行通信。