2013-08-07 47 views
-1

我的電腦連接了多個顯示器。我正在研究一個在瀏覽器中的表格中顯示數據的Web應用程序。當用戶點擊表格的一行時,會顯示一個窗口,其中包含有關所選行的詳細信息。如果用戶點擊不同的行,將打開一個新窗口。你可以控制Javascript創建的窗口顯示在哪個顯示上嗎?

我有兩個要求,我需要做的工作:

  1. 窗戶不應該堆起來一個在另一個之上,他們應該級聯。我有適用於Firefox的代碼,但IE和Chrome只是在同一個地方打開每個窗口,以便堆疊起來。如果我跟蹤打開的窗口數量,我可以打開一個級聯機制,但有沒有更好的方法?

  2. 如果機器有多個顯示器,如果帶有表格的窗口在一個屏幕上而另一個窗口上打開了詳細信息窗口,那就好了。在我完成的任何搜索中,我一直無法找到任何內容。有沒有這樣的代碼?

編輯:

對於@Neal:

Function newWin(mypage, myname, cascade) { 
      if (!cascade) cascade = false; 

    if (!myname) 
      myname = 'DETAILS'; 

    var w = 820; 
    var h = 685; 
    var settings = 'height=' + h + ','; 
    settings += 'width=' + w + ','; 

    if (!cascade) { 
     if (screen.width) { 
      var winl = (screen.width - w)/2; 
      var wint = (screen.height - h)/2; 
     } 
     else { 
      winl = 0; 
      wint = 0; 
     } 
     if (winl < 0) winl = 0; 
     if (wint < 0) wint = 0; 

     settings += 'top=' + wint + ','; 
     settings += 'left=' + winl + ','; 
    } 

    settings += 'scrollbars=yes,resizable=yes,menubar=yes,location=yes'; 
    gPopupWindow = window.open(mypage, myname, settings); 

    // fix for IE focus 
    // when from ajax loaded list 
    // see convoy dropdownlist item click 
    //gPopupWindow.focus(); 
    setTimeout(function() { gPopupWindow.focus() }, 0); 
} 

通過傳遞正確的cascade,Firefox允許操作系統打開它想要的窗口。但IE瀏覽器& Chrome始終將窗口放在相同的位置,但它在屏幕上的位置對於每個瀏覽器都不同。我希望IEChrome能夠像Firefox一樣行事,但瀏覽器的差異是生活中的事實。

正如我所說的,我可以通過調用該函數跟蹤已打開多少個窗口,並根據該數字計算新的左邊頂點座標&。不過,我寧願不要。

+1

你能展示一些你試過的代碼嗎? – Neal

回答

1

事實上,無法控制在哪個屏幕上使用JavaScript在多屏幕系統上顯示新窗口。無需編寫自己的DLL並將其合併到您的應用程序中。有很多方法可以在DLL中調用函數,但不值得這樣做,因爲DLL將是Windows專用的,您需要在Mac上執行其他操作。

此外,不同的瀏覽器使這個問題變得複雜,因爲添加自定義代碼的方法也不同於瀏覽器。

對於這個問題,如果您在顯示新窗口時沒有指定左邊的&頂部座標,則每個瀏覽器都會在不同的位置顯示新窗口,而不管它決定在哪個屏幕上顯示窗口。這種行爲是瀏覽器與瀏覽器完全不一致的,更不用說操作系統。

不要這樣做。