【问题标题】:Javascript: save and restore browser window sizesJavascript:保存和恢复浏览器窗口大小
【发布时间】:2016-04-12 03:39:56
【问题描述】:

在我的 vaadin 应用程序中,用户可以使用多个浏览器弹出窗口保存用户工作区,并在以后恢复工作区。

我保存了以下 vaadin 方法返回的浏览器窗口大小。

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

Vaadin在上述方法中返回浏览器的内容宽度和高度,不包括标题栏和顶部的其他控件,如地址栏和工具栏。

在恢复工作区时,我使用resizeTo() javascript 方法来设置浏览器窗口的大小。

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

resizeTo() 设置浏览器窗口的总宽度和高度,而不是内容区域。因此,浏览器窗口会变得小于预期大小。

有没有人知道更好的方法来实现这一点?

【问题讨论】:

标签: javascript vaadin


【解决方案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 浏览器大小。

【讨论】:

  • 很难使用您建议的方式来获取窗口的大小,因为它是在 javascript 中的(我需要 vaadin 后端的大小)。顺便说一句,大小与 Page.getBrowserWindowHeight() 给出的大小相同。你的 doResize() 方法做了我想要的。
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2015-04-20
  • 2017-04-15
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多