谷歌浏览器扩展中是否可以嵌入HTTP服务器?

17

您认为是否可能在Google Chrome扩展程序中嵌入HTTP服务器?

我看到其他Google Chrome扩展程序执行本机代码,显然它们使用NPAPI来实现,但我不知道那是什么。这让我感到有些困惑,因为我不是C++专家或类似的人。所以我现在感到有些束手无策,这就是我请求帮助的原因。

具体来说,我想创建一个类似于Opera Unite的Chrome扩展程序。对于那些不知道我在说什么的人:Opera Unite基本上是与浏览器捆绑在一起的零配置Web服务器。我不想像Opera那样使用它,但我喜欢这个概念。

我想使用类似于node.js这样的技术在浏览器内部创建一个简单的Web界面来控制浏览器中的一些内容。可以将其视为浏览器的远程控制器。如果无法使用node.js,则希望使用lighthttpd或类似的技术。只要它能够让我通过HTTP接收命令,那么使用的技术并不重要。

但是如何将现有的Web服务器制作成NPAPI插件呢?

澄清:我希望任何浏览器都能与我的扩展程序通信。特别是我希望移动设备(如Android或iPhone)能够远程控制浏览器。除了使用HTTP服务器之外,是否还有其他方法可以实现这一点?

另一个更新:我认为最简单的方法是在Web上使用中继服务器,例如Pusher或一些自己创建的服务。但我不喜欢这种方法,因为它需要持续的互联网连接,并且因为它是付费服务。

谢谢大家!


1
请查看 https://github.com/GoogleChrome/chrome-app-samples/tree/master/webserver - Rob W
3个回答

5
这里有另一个使用chrome.socket实现的web服务器:https://github.com/kzahel/web-server-chrome。在chrome-app-samples中链接的服务器示例实际上非常有bug,如果您例如按住Ctrl-R在其提供的页面上,它将会锁定。

4
如果您想为浏览器进行远程控制,像HTML5 WebSockets这样的东西是否适合您?

http://www.html5rocks.com/tutorials/websockets/basics/

你可以拥有一个外部的“远程”服务器,通过WebSockets监听你的扩展。如果你想通过扩展来托管一个Web服务器。你需要使用NPAPI,有许多C++库(谷歌搜索)可以完成简单的Web服务器。但我更愿意使用WebSockets与外部服务器通信,这样它可以提供你想要的任何东西。
但是,如果你坚持要使用扩展学习C++、NPAPI,那么网上有很多关于NPAPI的例子。

谢谢你的回答。我不确定我是否完全理解了你的意思。我希望任何浏览器都能与我的扩展程序进行通信。特别是我希望移动设备,如Android或iPhone,能够远程控制浏览器。那么你是说我可以使用WebSockets来实现这个功能吗?如果真的这么容易就太棒了,但我认为我运气不好。我认为大多数浏览器甚至还没有实现WebSockets。 - Jannes Meyer
你可以拥有一个WebSocket服务器,而你的扩展将会监听该WebSocket。你的WebSocket服务器可以是nodejs。所有其他浏览器都可以通过HTTP(普通请求)向该WebSocket服务器发送消息,然后它将通过WebSocket向扩展广播其消息。但是你可以使用NPAPI并在每个人的计算机上托管一个服务器,但这会成为安全风险,因为你正在暴露本地代码。但在客户端上托管服务器的好处是你可以直接与它通信,但这是一种安全风险,因此不建议使用NPAPI。 - Mohamed Mansour
2
谢谢。我能看出来,我自己编写的不好的NPAPI Web服务器会带来安全风险。Chrome没有内置这种功能真是太遗憾了。它将真正实现许多很酷的新功能。无论如何,我认为中继服务器方法可能是最好的方法,尽管它有缺点。这似乎是唯一可行的方式,而不会带来重大安全风险。虽然我真的认为浏览器最终应该能够彼此进行P2P通信。;-) - Jannes Meyer
是的,我部分同意 :) 创建一个公共的P2P API非常困难,还要考虑安全性。中继服务器有缺点,但它会使您的扩展更安全,人们不会对发生了什么产生疑问。例如,创建一个WebSocket远程应用程序来通过硬件设备控制网站是有效的(可以很快),但将该硬件作为NPAPI扩展程序会很酷,这样它就可以实时运行。因此存在缺点,但它使Web更安全,直到沙盒API(如NaCL PEPPER)得到最终确定 :) - Mohamed Mansour

2

4
请注意,这是一个Chrome 应用程序,而不是Chrome扩展。独立的Chrome扩展无法启动服务器,但可以通过扩展和Chrome应用程序之间的外部消息传递或扩展和预安装在操作系统上的某些应用程序之间的本地消息传递来启动服务器。 - Rob W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接