如何从Safari扩展程序与外界通信?

时间:2011-08-25 00:44:20

标签: safari-extension

如何让正在运行的进程知道在Safari中单击了上下文菜单?

我已经读过,由于安全性,这是不可能的,但这似乎是错误的,因为1Password以某种方式将桌面应用程序数据库中的所有信息提取到Safari扩展中。我编写了扩展来显示上下文菜单,并尝试向localhost发送XMLRPC请求,但无法使其工作。

2 个答案:

答案 0 :(得分:1)

我不确定这一点,但我认为1Password通过让后台进程(1PasswordAgent)不断轮询扩展的本地数据库和/或配置文件中的某些更改来完成它的工作。例如,要最初将密码放入扩展中,扩展可以在其localStorage数据库中设置某个标志,该标记将由(通过Safari而不是扩展名)写入文件。然后,代理会注意到文件中的标志,并将密码从主1Password数据库复制到扩展的本地数据库中。同样,当扩展创建新密码条目时,代理会注意到扩展数据库中的更改并将其镜像到1Password数据库。

也许你可以做类似的事情?

答案 1 :(得分:1)

虽然我不知道1Password的实现,但LiveReload通过使用WebSocket连接到localhost URL(由应用程序处理)来实现相同的目的。如果您是从全局页面执行此操作,则跨域限制不适用,因此您可以自由连接到任何URL:

var ws = new WebSocket("ws://localhost:98765");
...

(小心那个localhost的东西,但Linux上的Chrome需要0.0.0.0而不是127.0.0.1或localhost。至少它曾经想要它。)