使用javascript(window.open)检测IE窗口是否有滚动条

dia*_*dem 4 javascript internet-explorer scrollbar

当我调用window.open时,我可以包含一个参数列表.其中一个参数是滚动条,可以设置为.

当我在子窗口中放置javascript时,javascript需要检测窗口打开时是否将滚动条设置为yes或no.我想知道窗口是否默认启用了滚动条.

我只关心在IE中这样做.我该如何检查?window.scroolbar在IE中不起作用.

我该怎么做呢?要非常清楚,我不是在谈论div溢出,我在谈论窗口的滚动条属性.

编辑:
- 我在IE中,因此window.scrollbars/this.scrollbars不会返回任何内容
- 窗口滚动条存在于正文之外.
- 查看文档的宽度将告诉我有关该文档的信息.我甚至可以弄清楚文档中是否有滚动条.这不会告诉我有关窗口本身的任何信息.
- 由于苦行僧的原因,窗口滚动条的宽度会根据当前所选的Windows桌面主题的变化而变化.

Dav*_*veS 8

除了打开子窗口(设置滚动条= yes或no)的脚本旁边,添加一个窗口级变量,如果scrollbars = yes则为true,否则为false.

然后在子窗口的脚本中,查找已设置的值self.opener.myWindowLevelVariable.

您也可以命名变量.如果您愿意,重要的部分是self.opener或window.opener.

更新:

响应您的更新,不想在父级中使用变量...然后反转我的初始建议.将变量放在子项创建时.

家长:

var scrollwindow = window.open("file.htm", "anotherwindow", "width=400,height=250,scrollbars=no");
scrollwindow.hasScrollbars = false;
Run Code Online (Sandbox Code Playgroud)

儿童:

alert(hasScrollbars);
Run Code Online (Sandbox Code Playgroud)

如果你想处理直接打开子窗口的情况,那么它会变得更有趣......

儿童:

try {
    // do something with hasScrollbars
    // If it isn't true or false, ie undefined, using it will throw you into the catch.
    alert(hasScrollbar);
} catch (e) {
    // scrollbars weren't explicitly added or forbidden, so they'll automatically
    // show up if the content is larger than the window. In this case, use a
    // scrollbar sniffing technique.
    var hasVerticalScrollbar = document.body.scrollHeight > document.body.clientHeight;
    var hasHorizontalScrollbar = document.body.scrollWidth > document.body.clientWidth;
}
Run Code Online (Sandbox Code Playgroud)

滚动条嗅探:我认为这就是Stephano的目标.他走在正确的轨道上.但是组合使用clientWidth,scrollWidth,clientHeight和scrollHeight.从怪癖模式:

如果元素没有滚动条,则scrollWidth/Height应该等于clientWidth/Height.

当元素没有滚动条时,IE使scrollHeight等于内容的实际高度; 而不是元素的高度.scrollWidth是正确的,除了在IE8中,它关闭了5个像素.

所以,你必须为IE调整滚动条嗅探部分,但这是基本的想法.