【问题标题】:Chrome Extension - Communicating with external programChrome 扩展程序 - 与外部程序通信
【发布时间】:2012-09-16 10:40:48
【问题描述】:

我有一个外部应用程序可以自动执行网站上的某些任务。我的目标是实现一个允许程序和 Chrome 同步 cookie 的系统。虽然可以查询 Chrome 的 cookie DB 以读取 cookie,但由于 Chrome 对文件保持 I/O 锁定,因此无法更新 DB,因此无法轻松同步。

对我来说,下一个合乎逻辑的步骤是尝试创建一个扩展程序,该扩展程序将根据需要更新 cookie(通过 Chrome 的 cookie API)。然而,经过大约两天的研究,我一直无法找到在浏览器和我的应用程序(用 Python 编写)之间传递 cookie 数据的有效方法。

套接字已被淘汰,因为它仅适用于基于桌面的应用程序。 Websockets 已经出局,因为据我所知,使用 HTML5 API 设置 Websocket 服务器是不可能的(这是我需要的,因为浏览器需要成为服务器并且程序将是连接客户端)。我真的不确定我现在还剩下什么。我在这里遗漏了一些非常明显的东西吗?任何帮助表示赞赏,干杯。

【问题讨论】:

  • 为什么不能使用套接字?另外,为什么浏览器需要成为服务器?一些额外的信息会很有帮助:)
  • “仅基于桌面的应用程序”。 “网站上的一些任务”。什么?
  • 有人告诉我不能在扩展中使用套接字。事实上,当我尝试将套接字加载到我的扩展程序中时,我使用以下元文件收到了“权限 [2] 的无效值”:pastebin.com/Exj3feFP。仅将浏览器作为服务器才有意义,因为只有一个浏览器并且可能打开了我的程序的多个实例。将浏览器作为服务器将允许所有应用程序实例连接到浏览器,而不是让浏览器尝试查找并连接到每个应用程序实例。这有帮助吗?

标签: javascript python html google-chrome


【解决方案1】:

这感觉像是一种非常奇怪的方式来做任何你想做的事情。你为什么又这样做了?

无论如何,最明显的解决方案是这样的:

您显然必须保护应用程序/插件和服务器之间的通信。同样,这感觉像是一种非常奇怪的做事方式。但解决方案会奏效。在这种情况下两者应用程序和插件都是 WS 客户端,而您的服务器是仲裁者。

【讨论】:

  • 我会试一试。我正在尝试在 Google Chrome 和 Python 应用程序之间同步 cookie。除非我没有看到其他方式,否则这种实现是我唯一真正的选择。
  • 编辑文件是不可能的(正如你所意识到的),我不知道有任何 MPI 风格的 JS 库,所以 web-sockets(或 AJAX)可能是你最好的选择。只需确保同步正确的浏览器即可。