在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什么都不做的情况?
您可以使用该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)