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

时间:2014-06-26 16:01:27

标签: javascript

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

m = window.open(location.origin);
m.resizeTo(400, 400);

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

window.resizeTo(400, 400);
然后没有任何反应。我理解这种行为的原因。如何检测window.resize什么都不做的情况?

3 个答案:

答案 0 :(得分:4)

方法1:

您可以使用window.opener property。如果它为null,则表示您没有打开该窗口,因此无法调整其大小。

window.parent iframesif (m.opener) { m.resizeTo(400, 400); } else { // You did not create the window, and will not be able to resize it. } 更多。

如:

resizeTo

方法2:

ajp15243提出了一个很好的观点,所以您可以做的一件事是听取调整大小事件并查看您的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. } 是否有效:

attachEvent

我还没有能够对此进行全面测试,但它仍然是一种潜在的方法。对于IE8及更低版本,您可能需要使用m.resizeTo(400, 400)。同样正如@Wesabi所指出的,调整大小可能会触发其他事件(并且如果用户正在调整窗口大小作为附加的监听器,则可能触发),因此执行此操作最好是可能的最短时间跨度。

方法3:

另一种方法是调用m.resizeTo(400, 400); if (w.outerWidth != 400 && w.outerHeight != 400) { // Your resize didn't work } 然后检查窗口大小以查看当前大小是否等于您设置的大小:

{{1}}

答案 1 :(得分:1)

最简单的方法是检查窗口是否有parent。 if !window.parent,这意味着它是不能用JS调整大小的主窗口,否则你有调整大小的情况。

编辑:Igor在找到它之前发布了它:你想要m.opener()而不是window.parent

答案 2 :(得分:0)

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'); 
}