Javascript 获取开启器窗口的窗口大小(IE)

Javascript 获取开启器窗口的窗口大小(IE),javascript,html,internet-explorer,Javascript,Html,Internet Explorer,对于FF和其他非IE浏览器,window.opener.outerWidth/Height为我提供所需信息。对于IE来说,从IE6到IE8,我仍然不知所措。我不能使用jquery,因为开瓶器的页面超出了我的控制范围,所以我不能使用window.opener.$(window)。这需要开场白附加jquery(如果我错了,请纠正我) 我在谷歌上搜索了很多,也搜索了这个网站,仍然找不到一个明确的简洁的答案 加上: 我真的需要外部尺寸,这样我就可以对打开的窗口进行重新调整(w,h),其中w和h是根据打开

对于FF和其他非IE浏览器,window.opener.outerWidth/Height为我提供所需信息。对于IE来说,从IE6到IE8,我仍然不知所措。我不能使用jquery,因为开瓶器的页面超出了我的控制范围,所以我不能使用window.opener.$(window)。这需要开场白附加jquery(如果我错了,请纠正我)

我在谷歌上搜索了很多,也搜索了这个网站,仍然找不到一个明确的简洁的答案

加上: 我真的需要外部尺寸,这样我就可以对打开的窗口进行重新调整(w,h),其中w和h是根据打开器的大小的比率计算的。具有讽刺意味的是,“resizeTo”设置IE和其他浏览器的外部大小。我还使用resizeBy尝试了大量的东西,这还不够好。

outerHeight
定义了浏览器窗口的尺寸(包括侧边栏、窗口浏览器和窗口[re-]调整边框/手柄的大小)。不幸的是,您无法在IE中获得这些尺寸-只有窗口视口尺寸可用(对于我见过的大多数应用程序来说已经足够好了)。阿卡

jQuery可以提供当前窗口视口的尺寸,但不能提供其他窗口(例如,打开器、子窗口等)。所以你必须自己编写代码。这是一个原始样本:

// get viewport size (without scrolling) of the given window object
function clientSize(win) {
    var width, height;

    if(win.innerWidth || win.innerHeight) {
        width = win.innerWidth;
        height = win.innerHeight;
    } else {
        var doc = win.document;
        width = doc.documentElement.clientWidth || doc.body.clientWidth;
        height = doc.documentElement.clientHeight || doc.body.clientHeight;
    }

    return { width:width, height:height }
}
像这样尝试:

var openerSize = clientSize(window.opener); 
// now use openerSize.width, openerSize.height
还请注意,如果给定窗口已从另一个域加载文档,则无法读取这些值中的任何一个(安全措施)。

outerHeight
定义浏览器窗口的尺寸(包括侧边栏、窗口浏览器和窗口[重新调整]边框/句柄大小)。不幸的是,您无法在IE中获得这些尺寸-只有窗口视口尺寸可用(对于我见过的大多数应用程序来说已经足够好了)。阿卡

jQuery可以提供当前窗口视口的尺寸,但不能提供其他窗口(例如,打开器、子窗口等)。所以你必须自己编写代码。这是一个原始样本:

// get viewport size (without scrolling) of the given window object
function clientSize(win) {
    var width, height;

    if(win.innerWidth || win.innerHeight) {
        width = win.innerWidth;
        height = win.innerHeight;
    } else {
        var doc = win.document;
        width = doc.documentElement.clientWidth || doc.body.clientWidth;
        height = doc.documentElement.clientHeight || doc.body.clientHeight;
    }

    return { width:width, height:height }
}
像这样尝试:

var openerSize = clientSize(window.opener); 
// now use openerSize.width, openerSize.height

另外请注意,如果给定窗口已从另一个域加载文档(安全措施),则无法读取这些值。

@crescentfresh谢谢您的回答。在我发布这个问题之前,我已经尝试过使用你提到的方法。问题是,我真的需要外部尺寸,以便我可以对打开的窗口进行重新调整(w,h),其中w和h是根据比率或开瓶器的大小计算的。具有讽刺意味的是,“resizeTo”设置IE和其他浏览器的外部大小。我还用resizeBy尝试了一堆乱七八糟的东西,还不够好。不管怎样,输入值+1:)@o.k.w:如果你的最终目标是调用
resizeTo()
,你可以在这里做一个诀窍:它所做的只是发出一个一次性的固定大小的调用,调用
resizeTo(500500)
,减去IE报告的值,然后在real
resizeTo
调用中使用它们。@crescentfresh我的最终目标是将新窗口的大小调整为与打开窗口的固定比例。所以resizeTo是最直接的。ResizeBy是我试过的一次侧绊。你的建议会起作用的,虽然有点不正统,是吗?无论如何,感谢你,如果没有更好的解决办法,我可能会这么做。:-)@o、 k.w:是的,这很不正统。这可能是一个可接受的解决方案,因为您无论如何都要执行
resizeTo()
。否则,您将调整窗口大小,因为它对用户体验没有明显的帮助。@谢谢您的回答。在我发布这个问题之前,我已经尝试过使用你提到的方法。问题是,我真的需要外部尺寸,以便我可以对打开的窗口进行重新调整(w,h),其中w和h是根据比率或开瓶器的大小计算的。具有讽刺意味的是,“resizeTo”设置IE和其他浏览器的外部大小。我还用resizeBy尝试了一堆乱七八糟的东西,还不够好。不管怎样,输入值+1:)@o.k.w:如果你的最终目标是调用
resizeTo()
,你可以在这里做一个诀窍:它所做的只是发出一个一次性的固定大小的调用,调用
resizeTo(500500)
,减去IE报告的值,然后在real
resizeTo
调用中使用它们。@crescentfresh我的最终目标是将新窗口的大小调整为与打开窗口的固定比例。所以resizeTo是最直接的。ResizeBy是我试过的一次侧绊。你的建议会起作用的,虽然有点不正统,是吗?无论如何,感谢你,如果没有更好的解决办法,我可能会这么做。:-)@o、 k.w:是的,这很不正统。这可能是一个可接受的解决方案,因为您无论如何都要执行
resizeTo()
。否则,您将调整窗口大小,以确保对用户体验没有明显的帮助。