C++; Firefox提供了XPCOM API接口,用于编写C++中的附加类,并允许第三方Web应用程序访问它们。我想知道,还有其他方法可以实现这些好处吗?(即在C++中添加一个附加的程序,提供一个JavaScript接口,那么任何JavaScript应用程序都可以使用这个接口,最终C++ C++功能)?< /P> < P>是的,可以用C++编写XPCOM组件(或者JavaScript用于这方面),并将它们公开到网站上。您可以在JavaScript全局属性、JavaScript全局构造函数等类别中注册它们。 这些东西通常没有很好的记录,如果有的话。如果您想了解更多信息,请阅读代码(例如on)

C++; Firefox提供了XPCOM API接口,用于编写C++中的附加类,并允许第三方Web应用程序访问它们。我想知道,还有其他方法可以实现这些好处吗?(即在C++中添加一个附加的程序,提供一个JavaScript接口,那么任何JavaScript应用程序都可以使用这个接口,最终C++ C++功能)?< /P> < P>是的,可以用C++编写XPCOM组件(或者JavaScript用于这方面),并将它们公开到网站上。您可以在JavaScript全局属性、JavaScript全局构造函数等类别中注册它们。 这些东西通常没有很好的记录,如果有的话。如果您想了解更多信息,请阅读代码(例如on),firefox,firefox-addon,Firefox,Firefox Addon,但由于许多原因,这样做是非常不受欢迎的: 很难确保这些东西实际上是安全的,并使其工作可靠 很难控制哪些网站实际使用新的APIJavaScript全局属性和好友将可访问所有网站 您的加载项将在全局javascript命名空间中引入新名称,这可能与网站代码冲突。(因此,许多新的WebAPI没有直接引入全局名称空间,而是成为navigator的一个属性) 由于这些原因,addons.mozilla.org网站将只接受使用此机制的加载项,作为规则的例外,并且仅当作者证明需要使用并且没有真正的替代方案时

但由于许多原因,这样做是非常不受欢迎的:

  • 很难确保这些东西实际上是安全的,并使其工作可靠
  • 很难控制哪些网站实际使用新的API<代码>JavaScript全局属性和好友将可访问所有网站
  • 您的加载项将在全局javascript命名空间中引入新名称,这可能与网站代码冲突。(因此,许多新的WebAPI没有直接引入全局名称空间,而是成为navigator的一个属性)
  • 由于这些原因,addons.mozilla.org网站将只接受使用此机制的加载项,作为规则的例外,并且仅当作者证明需要使用并且没有真正的替代方案时
有几篇关于网页到扩展通信的文章,反之亦然,您可以使用,例如

此外,不鼓励在扩展中提供二进制XPCOM组件:

  • 您需要针对每个Gecko版本(每六周)重新编译二进制文件,因为自Firefox4以来,二进制组件都有版本标签
  • (点)版本之间的二进制API/ABI并不像您希望的那样稳定。实际上,API/ABI经常在游戏后期意外中断,导致许多用户出现大量不必要的崩溃,例如
  • 平台开发者
相反,您应该尽可能使用Javascript,和/或使用C-API/ABI创建一个普通的二进制库(.so、.dll、.dylib)并使用。您可以用javascript实现XPCOM组件,然后用js ctypes调用库。
很抱歉,现在大多数加载项都切换到js ctypes了。

非常感谢您提供了详尽的答案!你能建议一下有哪些可能的替代方案吗?