2017-10-18 101 views
8

我想出了将元素分离到弹出窗口的想法。使用window.open()进行弹出,在该文档中设置一些元素,并添加事件侦听器以达到原始目的,但作为弹出窗口组件。所有这些工作,似乎创建的窗口是由同一个线程处理。使用多个交互式弹出窗口的影响

这种“技巧”是否容易出错? I.g:如果我在弹出窗口中创建一个画布并从中获取WebGL上下文,它会完美地工作吗?如果我在那里设置了一堆事件监听器,我会毫不迟疑地从他们那里获得回调吗?

我无法对此进行研究,因为几乎没有人这样做。在我的生活中,我看到很多网站都使用弹出式窗口进行用户输入,但不是用于交互式或实时的东西。我正在构建一个复杂的网络应用程序,利用多个显示器将有助于用户体验。你知道,至少我知道拥有两台显示器是多么痛苦,并且无法使用它们,因为应用程序的所有组件都被限制在一个窗口中。试想一下,如果使用MDI版本的Photoshop,所有工具箱都在MDI区域内,并且无法将它们从应用程序窗口中取出。一个网页就是这样。

+1

Microsoft Dynamics CRM广泛地执行此操作。这非常“实时”。怀疑这会帮助你进一步研究他们的技术,但这只是一个想到的例子。 FWIW,我有两台显示器,但Dynamics CRM仍然可能令人沮丧地使用它的所有多个窗口;您仍然需要仔细考虑这些多个窗口的工作方式,否则它可能会比单个窗口UI更糟糕。 –

+0

这是一个面向公众的网络应用程序或内部应用程序?换句话说,你可以控制环境? – fruggiero

+0

@fruggiero号它是针对普通大众的。谈论像Kerbal Space Program这样的飞行模拟器。 –

回答

1

虽然这是非常规的,但它绝对符合您提到的要求。当涉及到浏览器支持处理跨窗口的翻译或通信时,我没有看到任何问题,只是您需要更加小心您的代码。如果用户关闭了其中一个弹出窗口(或注册一个窗口关闭回调以便进行必要的调整),就会经常进行检查。

跨窗口事件也应该没问题。请参阅http://help.dottoro.com/ljrwrqew.php,它具有将事件回调从一个窗口附加到另一个窗口的完全相同的示例。

另一个好读是http://www.infimum.dk/HTML/JSwindows.html

0

一个可能的缺点可能是弹出窗口可以通过浏览器弹出窗口拦截器被阻塞(但是请注意,你可以告知用户不要阻止弹出从您的Web应用程序来)

另一个问题可能是您在JavaScript代码中指定的弹出窗口的尺寸可能不受尊重(这取决于浏览器的判断),因此例如一个浏览器可以随时打开新窗口中的弹出窗口标签或新的最大化窗口。

在这里,你会发现多窗口一些现成的实验:https://experiments.withgoogle.com/chrome?tag=Multi-Window

你的主窗口和弹出式窗口,你不应该有任何问题之间的数据共享。

需要注意的是,并非每个浏览器都使用相同的线程模型,因此您必须在所有需要支持的浏览器上执行一些性能测试,并查看差异。