2016-04-12 142 views
0

在我的vaadin應用程序中,用戶可以使用多個瀏覽器彈出窗口保存用戶工作區並稍後恢復工作區。Javascript:保存和恢復瀏覽器窗口大小

我保存下面的vaadin方法返回的瀏覽器窗口大小。

Page.getBrowserWindowHeight(); 
Page.getBrowserWindowWidth(); 

Vaadin返回上述方法中的瀏覽器,不包括在頂部標題欄和其他控制的內容的寬度和高度,如地址欄和工具欄。

恢復工作區時,我使用了resizeTo() JavaScript方法來設置瀏覽器窗口的大小。

JavaScript.getCurrent().execute("resizeTo(" + windowWidth + "," + windowHeight + ")"); 

resizeTo()設定的瀏覽器窗口,而不是內容區域的總寬度和高度。因此,瀏覽器窗口變得小於預期的大小。

有誰知道一個更好的方法來實現這個?

+0

你可以發佈你的'resizeTo'函數嗎? –

+0

@DavidBlaney它是內置的window.resizeTo()函數。 http://www.w3schools.com/jsref/met_win_resizeto.asp –

回答

1

您使用

Page.getBrowserWindowHeight(); 
Page.getBrowserWindowWidth(); 

的方法使用下面的JavaScript來確定「UI」尺寸

// Window height and width 
var cw = 0; 
var ch = 0; 
if (typeof(window.innerWidth) == 'number') { 
    // Modern browsers 
    cw = window.innerWidth; 
    ch = window.innerHeight; 
} else { 
    // IE 8 
    cw = document.documentElement.clientWidth; 
    ch = document.documentElement.clientHeight; 
} 

要做到這一點使用resizeTo()(雖然我覺得你可以在運行一些browser compatibility issues )你需要考慮一些其他的事情:

function doResize(width, height){ 
    // Window height and width 
    var cw = 0; 
    var ch = 0; 
    if(typeof(window.innerWidth) == 'number') { 
     // Modern browsers 
     cw = width + (window.outerWidth - window.innerWidth); 
     ch = height + (window.outerHeight - window.innerHeight); 
    } else { 
     // IE 8 
     cw = width + (document.documentElement.offsetWidth-document.body.offsetWidth); 
     ch = height + (document.documentElement.offsetHeight-document.body.offsetHeight); 
    } 
    window.resizeTo(cw, ch); 
} 

另一種選擇是使用RPC創建一個隱藏的組件來執行您自己的JS瀏覽器大小計算。

+0

很難使用你建議的方式來獲得窗口的大小,因爲它是在JavaScript中(我需要在vaadin後端的大小)。順便說一下,大小與Page.getBrowserWindowHeight()給出的大小相同。你的doResize()方法做了我想要的。 –