javascript - 滚动到 iframe 中的特定 ID,同时保留父页面位置

标签 javascript google-chrome firefox iframe

我需要能够按需在 iframe 中加载特定页面,因此我使用了一个简单的包装器:

function updateFrame(url) {
    frames[0].location = url;
}

然后我被要求将页面加载到一个特定的点,这是非常重要的,因为页面不在我的控制范围内并且并不总是 <a name> anchor 依赖。所以一些探索表明 ID 可以用作 anchor 。

也就是说,你可以滚动到<div id = "somewhere-down-the-line">与:

updateFrame("http://host/page#somewhere-down-the-line");

除了这个调用还会向上滚动整个视口(viewport),所以上面的 <div>转到顶部,其上方父页面中的所有内容都滚出 View 。

如何修改 updateFrame(url)以便它在 <iframe> 内滚动页面但页面的其余部分保持原样?

这个 hack 在 Firefox 20.0.1/Windows 上对我有用。本质上,我先加载页面,然后跳转到目标:

function updateFrame(url) {
    if (url.indexOf('#') > -1) {
        mainPage = url.split('#')[0];
        frames[0].location = mainPage;
    }
    frames[0].location = url;
}

我也希望能够在其他浏览器中使用它。我一直在努力让它在 Chrome 中运行。也许我什至会尝试 Internet Explorer...

最佳答案

如果 hack 没问题,而你正在寻找的是跨浏览器,请尝试使用 scrollTop重置您所在的位置。

例如如果它是滚动的 body

function updateFrame(url) {
    //save where you were
    var oldScroll = document.body.scrollTop;

    //this moves our body!
    frames[0].location = url;

    //move it back
    document.body.scrollTop = oldScroll;
}

当然,如果它实际上不是滚动整个视口(viewport)而是修改父 div 或其他内容,则 scrollTop 属性也会在该元素上。

让我知道这是否可行,但搞砸了框架上的滚动,因为我可以修改它以解决两个 scrollTop 之间的差异

关于javascript - 滚动到 iframe 中的特定 ID,同时保留父页面位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559884/

相关文章:

javascript - 如果返回数据错误,如何防止函数运行

javascript - 如何在谷歌浏览器扩展中切换 css 样式( list )

google-chrome - Chrome 在哪里存储扩展程序?

javascript - Windows 8 中的 chrome 扩展目录在哪里?

windows - Firefox 4 Windows 仅 "bug"和 :after/:before CSS selectors?

ruby-on-rails - Firefox 在下载时不显示 PDF 文件扩展名

css - Firefox 7 升级后 Google Web 字体无法使用

javascript - 如何获取 radio oncheck 上特定 div 的源代码?

javascript - jQuery TreeView 中的展开和折叠图标未显示在树中

javascript - 主干 View 嵌套