当我调用window.open时,我可以包含一个参数列表。其中一个参数是滚动条,可以设置为是或 no 。
当我在子窗口中放置javascript时,javascript需要检测窗口打开时是否将滚动条设置为yes或no。我想知道窗口是否默认启用了滚动条。
我只关心在IE中这样做。我该如何检查? window.scroolbar在IE中不起作用。
我该怎么做?要非常清楚,我不是在谈论div溢出,我在谈论窗口的滚动条属性。
编辑:
- 我在IE中,因此window.scrollbars / this.scrollbars不会返回任何内容
- 窗户滚动条存在于身体外部
- 查看文档的宽度将告诉我有关该文档的信息。我甚至可以弄清楚文档中是否有滚动条。这不会告诉我有关窗户本身的任何信息
- 由于苦行僧的原因,窗口滚动条的宽度会根据当前所选的Windows桌面主题的变化而变化。
答案 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
。