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

时间:2010-02-19 21:52:59

标签: javascript internet-explorer scrollbar

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

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

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

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

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

5 个答案:

答案 0 :(得分:8)

除了打开子窗口(设置scrollbars = 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;

子:

alert(hasScrollbars);

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

子:

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

Scrollbar嗅探:我认为这就是Stephano的目标。他走在正确的轨道上。但是组合使用clientWidth,scrollWidth,clientHeight和scrollHeight。来自quirks mode

  

如果元素没有滚动条   scrollWidth / Height应该等于   clientWidth /高度。

     

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

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

答案 1 :(得分:3)

您可以使用这个小小的JavaScript技巧确定窗口中是否有可见的滚动条:

//You'll have to modify this so as not to do it unless your user is running IE
window.attachEvent('onload', getChrome);

function getChrome() {
    //read the window width and height
    var w = document.documentElement.clientWidth;
    var h = document.documentElement.clientHeight;

    //set the window to that size
    window.resizeTo(w, h);

    //read the window width and height again
    var newW = document.documentElement.clientWidth;
    var newH = document.documentElement.clientHeight;

    //calculate the difference
    var diffX = w - newW;
    var diffY = h - newH;

    //set the window back to what it was
    window.resizeBy(diffX, diffY);

    alert('diffX: ' + diffX + '\ndiffY: ' + diffY);

    //If diffX is larger than 10 (in Vista and Windows 7, the borders are 5px each)
    //then you're scrollbar is visible.
}

答案 2 :(得分:1)

这有点hacky,但似乎有效:

function has_scrollbar() { 
    if (document.documentElement.clientHeight < document.body.offsetHeight) {
        alert("vertical scrollbar");
    } else {
        alert("no vertical scrollbar");
    }
}

检查offsetHeight(html内容)的大小,并将其与documentElement.clientHeight(IE的窗口高度)进行比较。显然,您可以为“高度”切换“宽度”。

希望这有帮助!

答案 3 :(得分:0)

试试这个

scrollwindow = window.open("file.htm", "anotherwindow", "width=400,height=250");
  if (scrollwindow.scrollbars) 
  {
alert("Yes we have  scrollbars");
  }
 else 
{
    alert("Sorry doesnt support scrollbars");
  }

答案 4 :(得分:0)

您可以查看document height,然后查看window height,如果文档高度是一个更大的数字,那么您有滚动条。

但是,因为IE将始终显示滚动条(即使您没有要滚动的内容),您可能需要为正文标记设置overvlow:auto