2017-10-18 91 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

你的主窗口和彈出式窗口,你不應該有任何問題之間的數據共享。

需要注意的是,並非每個瀏覽器都使用相同的線程模型,因此您必須在所有需要支持的瀏覽器上執行一些性能測試,並查看差異。