2010-10-12 52 views
1

使用两个独立的浏览器或计算机,或为了实验的目的,两个选项卡,有没有什么办法将命令从一个页面推送到另一个具有某种监听器对象的页面?使用jQuery控制另一页与另一页使用jQuery

因此,例如:

controller.html有一个链接,点击后会触发viewer.html动作。

这可能吗?

回答

1

除非一个人打开另一个,并且他们在同一个域中,这是不可能的。如果一个确实打开另一个,则可以通过window.opener与父母通信,并在执行window.open()时通过存储参考与孩子通信。

+0

有趣。我想这个替代方案是创建一些jQuery侦听器脚本,每隔几秒只检查一次对脚本的某种改变? – Ryan 2010-10-12 19:00:06

+0

@Ryan - 如果您的意思是轮询服务器的更改,那么可以运行或检查彗星:http://en.wikipedia。org/wiki/Comet_(编程) – 2010-10-12 19:01:16

+0

@Ryan另一个选择是使用Web套接字,但它在浏览器中的分布并不是特别广泛(甚至不知道它是否可以轻松地在PHP中完成)http://dev.w3.org/HTML5 /的WebSockets / – treeface 2010-10-12 19:06:57

1

您可以通过服务器实现某种消息传递。浏览器/计算机A将消息发送到服务器。服务器无法向浏览器/计算机B发送消息,但浏览器可以向服务器查询新消息。

1

您的第一个限制是您需要两端之间的服务器 - sender.html会向服务器发送AJAX请求,receiver.html会从服务器获取消息。 第二个是HTTP协议并不打算做服务器推送,所以除非接收方发起请求,否则服务器不能发送消息给接收方。

这两种方法是轮询和长时间的请求。

轮询表示接收方不断向服务器发送AJAX请求,询问是否有新消息。服务器返回任何新消息,或告诉接收方没有消息准备就绪。这很容易实现,并且相当健壮,但是它产生了大量的开销,因为接收者不断发射请求,其中大部分是冗余的,因为答案是“没有消息可用”。

使用长请求方法,接收方向服务器发送请求,但服务器在新消息到达之前不作出响应。好处是您只需要每条新消息一个请求,但由于请求可能会长时间保持打开状态,因此需要管理大量并发连接,这会给Web服务器带来更大的压力。

另一种替代方法是使用某种可以在当前浏览器上下文之外进行连接的插件或小程序。这样的插件可以使用任何它想要的协议,在这方面消除了HTTP的限制,但还有其他限制。

就我个人而言,除非即时响应至关重要,否则我会去投票。

1

在这种情况下,实时推送API可以帮助您解决问题吗?在大多数情况下,创建一个频道,当频道内发生事件时,频道将被推送到频道内的任何客户端。

因为我在这里很新,所以每个帖子只能分享一个链接。所以我写了几个实时推送API,我知道在pastebin:http://pastebin.com/QcsAWXXC

相关问题