在Javascript控制台中,如果我执行:
m = window.open(location.origin);
m.resizeTo(400, 400);
窗口将调整大小,但如果我只执行:
window.resizeTo(400, 400);
然后没有任何反应。我理解这种行为的原因。如何检测window.resize什么都不做的情况?
答案 0 :(得分:4)
您可以使用window.opener
property。如果它为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.
}
更多。
如:
resizeTo
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所指出的,调整大小可能会触发其他事件(并且如果用户正在调整窗口大小作为附加的监听器,则可能触发),因此执行此操作最好是可能的最短时间跨度。
另一种方法是调用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');
}