繁体   English   中英

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

[英]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什么都不做的情况?

方法1:

您可以使用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.
}

方法2:

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指出的那样,调整大小可能会触发其他事件(如果用户正在调整窗口大小作为附加的侦听器,则可能会触发),因此最好执行此操作,这是可能的最短时间跨度。

方法3:

另一种方法是调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM