是否可以确定window.resizeTo是否有效?

Jos*_*nox 9 javascript

在Javascript控制台内部,如果我执行:

m = window.open(location.origin);
m.resizeTo(400, 400);
Run Code Online (Sandbox Code Playgroud)

窗口将调整大小,但如果我只是执行:

window.resizeTo(400, 400);
Run Code Online (Sandbox Code Playgroud)

没有任何反应.我理解这种行为的原因.如何检测window.resize什么都不做的情况?

Igo*_*gor 4

方法一:

您可以使用该window.opener 财产。如果它为空,那么您没有打开该窗口,因此无法调整它的大小。

window.parent更多的是为了iframes等等。

例如:

if (m.opener) {
    m.resizeTo(400, 400);
} else {
    // You did not create the window, and will not be able to resize it.
}
Run Code Online (Sandbox Code Playgroud)

方法二:

ajp15243 提出了一个很好的观点,因此您可以做的一件事是监听调整大小事件并查看您是否resizeTo有效:

var resizeFired = false;
...
var triggeredResize = function() {
    resizeFired = true;

    m.removeEventListener('resize', triggeredResize);
}

m.addEventListener('resize', triggeredResize, true);

m.resizeTo(400, 400);

if (resizeFired) {
    // Your resize worked.
}
Run Code Online (Sandbox Code Playgroud)

我还无法完全测试这一点,但这仍然是一种潜在的方法。对于 IE8 及以下版本,您可能需要改用attachEvent。另外,正如 @Wesabi 指出的,调整大小可能会因其他事件而触发(并且如果用户将窗口大小调整为附加的侦听器,则可能会触发),因此最好在尽可能短的时间跨度内执行此操作。

方法三:

另一种方法是调用m.resizeTo(400, 400)然后检查窗口大小以查看当前大小是否等于您设置的大小:

m.resizeTo(400, 400);
if (w.outerWidth != 400 && w.outerHeight != 400) {
   // Your resize didn't work
}
Run Code Online (Sandbox Code Playgroud)