Javascript window.top.document.body.scrollTop在Chrome或FireFox中不工作

Javascript window.top.document.body.scrollTop在Chrome或FireFox中不工作,javascript,firefox,google-chrome,Javascript,Firefox,Google Chrome,下面的代码将打开一个模式窗口。这在IE 8中有效,但在Chrome或FF中无效。我不熟悉跨浏览器功能 function ShowModal(WindowID,FramesetID) { window.onscroll = function () { window.top.document.getElementById(WindowID).style.top = window.top.document.body.scrollTop; }; window.top.document.g

下面的代码将打开一个模式窗口。这在IE 8中有效,但在Chrome或FF中无效。我不熟悉跨浏览器功能

function ShowModal(WindowID,FramesetID)
{
    window.onscroll = function () { window.top.document.getElementById(WindowID).style.top = window.top.document.body.scrollTop; };
    window.top.document.getElementById(WindowID).style.display = "block";
    window.top.document.getElementById(WindowID).style.top = document.body.scrollTop;

    widthv=parseInt(parseInt(screen.width)/1.50);
    heightv=parseInt(parseInt(screen.height)/1.50); 

    window.top.document.getElementById(FramesetID).style.width=widthv;
    window.top.document.getElementById(FramesetID).style.height=heightv;
}
有人能帮助您使此代码与Chrome&FF兼容吗?
我尝试将
window.top
更改为
window.parent
,但没有成功 另外,在为多个浏览器编写代码时需要记住哪些规则(我已经浏览了一遍,但没有找到任何跨浏览器兼容性的规则)

更新:

问题是,在IE中,此模式窗口显示的屏幕大小约为屏幕大小的一半。在FF和Chrome中,模式窗口显示为一美元硬币大小。

我建议使用chrispanda建议的jQuery。jQuery有一个内置的scroll事件,其余的可以写在几行代码中来操作html/css


根据浏览器的当前呈现模式,您可能需要使用
document.documentElement.scrollTop
而不是
document.body.scrollTop
(同样,对于
scrollLeft

在(quirksmode.org的fame)中有一些关于这个问题的好背景,但它是从2002年开始的,现在有点过时了

正如其他人所建议的,2011年解决此类问题的最简单方法就是使用现有的JavaScript框架。非常流行(特别是在StackOverflow用户中),但是。

另一种解决方案:

(document.documentElement.scrollTop || document.body.scrollTop)
您可以使用:


window.pageYOffset

如果您认为不需要不必要的第三方库,可以尝试:

var scrollTop = (document.documentElement || document.body.parentNode || document.body).scrollTop;

它有点黑客味,但仍然比JQuery好。

我也有同样的问题,我检查了我的代码是否存在设置溢出,删除了:

overflow:auto;

从另一个工作的元素开始

我不得不每x毫秒检查一次作为解决办法。不太理想,但它对我有效,因为我找不到任何其他解决方案。注意,这是ES6代码,所以如果需要,您必须手动使其与ES5兼容,或者使用Babel

/**
 * Set the scroll top on load
 * @param {int} scrollTop The scrollTop
 */
let setScrollTop = scrollTop => {
    // Different browsers treat this differently, so set all
    window.scrollTop = scrollTop;
    window.document.body.scrollTop = scrollTop;
    window.document.documentElement.scrollTop = scrollTop;
};

/**
 * Jump to a page
 * @param {string} selector
 */
let jumpToPage = selector => {
    let i = 0;
    let top = document.querySelector(selector).offsetTop;
    let interval;

    interval = window.setInterval(() => {
        if ((document.body.scrollTop || document.documentElement.scrollTop) === top || i === 20) {
            window.clearInterval(interval);
            return;
        }

        setScrollTop(top);

        i++;
    }, 100);

    setScrollTop(top);
};

/**
 * On load
 */
window.addEventListener('load', () => {
    if (condition) {
        jumpToPage(selector);
    }
});

您是否考虑过使用jquery之类的工具来减轻跨浏览器功能带来的痛苦?@DotNetRookie:如果您能够发布实际的错误消息,您会得到更多帮助。Chrome和Firefox都有一个“JavaScript控制台”视图,显示来自JavaScript代码的错误和警告消息。@Daniel,从技术上讲没有错误消息。模态winodw看起来比设计的要小得多(在FF和Chrome中)。工作完美。谢谢!zsimo,也许你可以详细说明这是做什么的,OP可以在哪里找到这方面的参考资料。当然,我认为没有必要使用jQuery来解决Firefox的问题。document.body.scrollTop返回0只需使用window.pageYOffset来获取页面滚动时与顶部的距离:SimoneWorked for me。Chrome,IE9,Firefox。谢谢@zsimo!在Chrome、IE10和Firefox为我工作2017年的情况仍然如此吗?为了这么简单的东西,我不得不使用第三方库,这似乎很可笑。document.documentElement.scrollTop在现代浏览器中运行良好。这个答案是错误的。你肯定没试过这个密码。