[英]Can it be determined if window.resizeTo will work?
在Javascript控制台内部,如果我执行:
m = window.open(location.origin);
m.resizeTo(400, 400);
窗口将调整大小,但如果我只是执行:
window.resizeTo(400, 400);
没有任何反应。 我理解这种行为的原因。 如何检测window.resize什么都不做的情况?
您可以使用window.opener
属性 。 如果它为null,则表示您没有打开该窗口,因此无法调整其大小。
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.
}
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.
}
我还没有完全测试过这个,但它仍然是一种潜在的方法。 对于IE8及更低版本,您可能需要使用attachEvent
。 同样正如@Wesabi指出的那样,调整大小可能会触发其他事件(如果用户正在调整窗口大小作为附加的侦听器,则可能会触发),因此最好执行此操作,这是可能的最短时间跨度。
另一种方法是调用m.resizeTo(400, 400)
,然后检查窗口大小以查看当前大小是否等于您设置的大小:
m.resizeTo(400, 400);
if (w.outerWidth != 400 && w.outerHeight != 400) {
// Your resize didn't work
}
最简单的方法是检查窗口是否有parent
。 如果!window.parent
,这意味着它是无法用JS调整大小的主窗口,否则你有调整大小的情况。
编辑:Igor在找到之前发布了它:你想要m.opener()
而不是window.parent
MDN是一个很棒的JavaScript资源: https : //developer.mozilla.org/en-US/docs/Web/API/Window.resizeTo
从Firefox 7开始,根据以下规则,网站不再可能更改浏览器中窗口的默认大小:
您无法调整window.open未创建的窗口或选项卡的大小 。
当窗口或选项卡位于具有多个选项卡的窗口中时,您无法调整其大小。
那么,您需要检测您是否是儿童窗口:
https://developer.mozilla.org/en-US/docs/Web/API/Window.opener
if (window.opener) {
console.log('I can be resized');
} else {
console.log('I cannot be resized');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.