设计"弹出"自动更新的界面 - 甚至可能吗?

时间:2011-12-08 21:39:17

标签: php javascript

所以我开发了这个Web应用程序,它在管理页面上有几个多选框 - 每个框都包含多个值,我们称之为标准。

这些框中的条件是在另一个页面上的表单上生成的,并分别存储在数据库中的另一个表中。最大的问题是我的老板想要在新窗口中弹出新的标准编辑页面,或者在同一浏览器的不同选项卡中,允许用户添加一个或多个标准,并在主管理浏览器中进行这些更新窗口实时。

现在,如果它在同一个窗口中,我的直接想法将转到AJAX。但是,因为它将在两个独立的浏览器窗口中,我不相信这是一个可行的解决方案。

无论如何(除了某些形式的COM编程或其他OS-y方法,我不想进入)在两个浏览器窗口之间传递值,而不必重新加载主页面?这是一个关键问题 - 在此过程中根本无法重新加载主页面。

框架是否是答案(因此没有两个窗口可以摆脱双浏览器窗口问题)?别的什么?这超出了我的经验范围。

4 个答案:

答案 0 :(得分:0)

可能的解决方案:

  1. 框架(可能是最简单的,也适用于旧浏览器)
  2. Comet(模拟JavaScript推送通知)
  3. Mootools Request.Periodical
  4. HTML5 Web Sockets(“最佳”但仅适用于最新浏览器)

答案 1 :(得分:0)

好吧,您可以查看fsockopen()并查看php套接字解决方案在这种情况下是否有用,但这可能没有必要,因为套接字的技能级别 - 在我看来 - 远远高于在新框架中运行基本的ajax请求,以检查表单是否在最近5秒内发生了变化。

您可以在数据库中创建一个表来表示用户的表单,并将当前值存储在该表中,并在每次更新时重新生成一个令牌。这样,当您弹出应该更新的新屏幕时,您还会发送表单ID和第一个令牌。然后该窗口每5秒进行一次基本的ajax调用,以查看自上次调用以来该表单id的标记是否已更改。如果是这样,返回一个带有您需要的所有信息的json对象并相应地更新。如果没有,则返回false并不执行任何操作。

这只是一种可能性。这可能是很多不必要的数据库调用,但是又一次 - 我不知道这个请求的目的,所以我不知道这个解决方案相对于你的需求有多荒谬。

答案 2 :(得分:0)

我偶然发现sharing messages across windows使用了localstorage(DOM存储)API。我不知道你需要发送多少数据,并且存在一些兼容性问题(在IE8中支持IE启动,其他浏览器现在对某些版本有很好的支持)。基本上,每个页面都有一个“onstorage”事件处理程序集,因此在一个窗口中对存储(添加,删除,修改/更新)的修改也会在另一个窗口中触发该事件。当然,这仅限于相同的起源。从您描述的内容来看,这听起来像是一个有效的解决方案。

答案 3 :(得分:0)

使用

打开一个窗口
var new_window = window.open(...);

然后new_window是对新窗口中窗口对象的引用,并且从新窗口window.opener是对原始窗口中窗口对象的引用。根据相同的域安全策略,您将能够“跨越鸿沟”调用函数