与 Firefox 插件通信的最佳方式是啥
Posted
技术标签:
【中文标题】与 Firefox 插件通信的最佳方式是啥【英文标题】:What's the best way to communicate with a Firefox addon与 Firefox 插件通信的最佳方式是什么 【发布时间】:2011-12-15 19:19:37 【问题描述】:我需要能够从 Firefox 的活动选项卡中获取 URL。 DDE 不适用于多个实例,所以我想我可以构建一个插件来设置全局原子或其他东西。
我还想也许我可以使用剪贴板,但我不想覆盖任何现有的文本,而且似乎不支持自定义剪贴板类型。
我不想仅仅为了简单的 IPC 而写文件……所以在我这样做之前……对于这么简单的事情有没有更好的选择。
谢谢
【问题讨论】:
您可以做一些非常愚蠢的事情,例如每次更改文件时将当前 URL 写入文件并从其他进程读取该文件。 您可以在此页面找到解决方案:***.com/questions/11582607/… 【参考方案1】:从应用程序到 Firefox 插件的常用通信方式是通过 TCP 套接字。您创建一个nsIServerSocket 实例,在其上调用init()
,然后调用asyncListen()
。当应用程序连接到您的套接字时,您的侦听器的 onSocketAccepted 方法被调用,您将获得一个 nsITransport 实例,您可以从中读取或写入数据(使用 NetUtil.jsm 从输入流中异步读取)。
对于一个相对简单的示例实现,请参阅mozSocket.jsm(不使用NetUtils.jsm
读取数据)。
【讨论】:
使用 TCP 套接字来获取当前活动选项卡的 URL 听起来有点矫枉过正。由于我不是 Java 或 Firefox 人,看来我将不得不“破解”并将 URL 写入文件或其他丑陋的东西。【参考方案2】:我不知道这是否是最好的方法,但我认为使用 MozRepl 会对您有所帮助。 MozRepl 将使您能够通过 telnet 与 firefox 进行交互。
% telnet localhost 4242
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to MozRepl.
repl> content.location.href
"http://***.com/questions/8525428/whats-the-best-way-to-communicate-with-a-firefox-addon"
repl>
安装 MozRepl 后,您可以使用这个 ruby 小脚本来获取当前打开的标签页的 url。
require 'net/telnet'
t = Net::Telnet.new('Port' => 4242)
t.waitfor(/repl.*>/)
puts eval(t.cmd("content.location.href").split[0])
t.close
【讨论】:
【参考方案3】:我想知道这是否已经在 Firefox 中实现了,或者它是否仍处于构思阶段: Mozilla Notifications API.
Google 为 Chrome 扩展提供了 GCM。
【讨论】:
以上是关于与 Firefox 插件通信的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章
Apple Watch 与 iPhone 通信的最佳方式是啥? [关闭]
Python 脚本与将内容传输到客户端的 Python Flask 服务器通信的最佳方式是啥?
通过 RESTful-Http 与 iPhone 应用程序中的 Web 服务进行通信的最佳方式是啥