当 URL 包含片段时,iframe 会导致父元素在 Google Chrome 上向上滚动

2024-06-20

在 Google Chrome(37.0.2062.122、OSX / Windows)上,具有包含片段的 URL 的 iframe 会导致父元素向上滚动。

它只发生在 Chrome 中(在 Safari 和 Firefox 中测试)。

这是显示问题的小提琴:http://jsfiddle.net/wmz5cu1y/1/ http://jsfiddle.net/wmz5cu1y/1/(您必须单击Run twice.)

正如你所看到的,整个<body>包含 iframe 的内容已向上滚动。标题被隐藏,因为它现在位于窗口上方,并且页面底部有一个意外的空白区域。

如何避免这种情况?

悬赏提供非 js 解决方法或更简单的 html 文档来重现该问题。


正如其他答案已经提到的,这里的问题是 JSFiddle 特有的。我可以轻松地向您展示这一点,只需在该问题的 StackOverflow 代码片段中包含相同的代码即可:

iframe {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<iframe src="https://news02ycombinator02com2.mentionusercontent.net/item?id=8357207#up_8360397" width="100%" height="100%"></iframe>

更简单的 HTML 文档

当每个片段 URL 传递到iframe在 JSFiddle 上。因此,我们可以复制这个问题,只需创建一个单独的 JSFiddle 演示并链接到我们的iframe.

我在这里创建了这个新的 JSFiddle 演示:http://fiddle.jshell.net/JamesD/k5vk2u9h/1/show/light/#test http://fiddle.jshell.net/JamesD/k5vk2u9h/1/show/light/#test.

正如你所看到的,这里的片段是#test。现在可以使用以下标记在新的 JSFiddle 演示中复制此问题:

<iframe src="http://fiddle.jshell.net/JamesD/k5vk2u9h/1/show/light/#test"></iframe>

The height and width属性无关紧要,因为没有它们问题仍然出现。

JSFiddle 演示 http://jsfiddle.net/JamesD/xzonssqz/.


解决方法

这里的另一个答案表明修复方法是修改 JSFiddle 自己的 HTML,以便正确地重新渲染页面。这不是一个很好的解决方案,因为在现实情况下(即将某人链接到 JSFiddle 演示时),他们可能不具备实现此目标的专业知识。

我们可以使用 JavaScript 来解决这个问题。由于我创建的新 HTML 文档位于同一域(http://jshell.net http://jshell.net)我们可以在iframe本身。手动设置location.hash属性也会触发这个问题,所以我们可以做的是滚动iframe直接转到我们希望关注的元素。

首先,从 URL 中删除片段src我们的属性iframe:

<iframe src="http://fiddle.jshell.net/JamesD/k5vk2u9h/1/show/light/"></iframe>

如上所述,我使用的片段是一个元素,其id是“测试”。这意味着获取元素的最简单方法是通过它的元素来选择它id属性:

var frame = frames[0],
    elem = frame.document.querySelector('#test'),

Here, frame是对我们的参考iframe在我们自己的文档中,以及elem is our #test元素。我们可以通过使用来获取匹配元素的位置getBoundingClientRect():

    position = elem.getBoundingClientRect();

这将为我们提供一个 ClientRect 对象,如下所示:

有了这个,我们现在知道我们的#test元素距离我们的顶部 3034pxiframe。使用这个,我们现在可以使用以下方法将页面自己滚动到这个位置window.scrollTo()(其中window of our iframe在这种情况下是在我们的frame多变的):

frame.scrollTo(0, position.top);

JSFiddle 演示 http://jsfiddle.net/JamesD/et1oj1ph/.

请注意,此解决方案仅在以下情况下才有效:iframe指向同一域上托管的 URL,或者如果页面上启用了 CORSiframe是嵌入。


最好的选择

完成所有这些操作后,最好的办法就是简单地通知 JSFiddle 的开发人员这是一个错误。我已将其作为问题在 GitHub 存储库中提出:https://github.com/jsfiddle/jsfiddle-issues/issues/547 https://github.com/jsfiddle/jsfiddle-issues/issues/547.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 URL 包含片段时,iframe 会导致父元素在 Google Chrome 上向上滚动 的相关文章

  • 从谷歌加载 jquery 不起作用(对我来说)

    啊 我是个可怜的菜鸟 下面的 html 文档没有提醒任何人我的求助 有人知道为什么吗 这对我有用
  • 制作一个透明的圆形按钮,带有不透明边框和文本/字体很棒的图标

    基本上我想要一个性感的 反应灵敏的圆形按钮 它是透明的 这样你就可以通过它看到背景 但有一个不透明的轮廓 这样你就可以看到按钮和不透明的文本 或者也许我会在稍后阶段添加一个字体很棒的图标 这是我的 JS 小提琴 这样你就可以看到我正在尝试做
  • HTML5 中填充笔划的透明度

    我正在 HTML5 中开发一个涂鸦应用程序 我想做一种桶功能 这个想法是绘制一条路径 它将被关闭并用选定的颜色 描边的颜色 填充 它对于纯色效果很好 但如果我想要透明的描边和填充 我会遇到这个问题 所发生的情况是填充完成到笔划的中间 路径的
  • 如何使h1标签以其实际宽度居中

    我需要使 h1 标签居中 还需要在其周围制作边框 为了防止占用更多宽度 我给出display inline block但标签没有响应text align center then h1 text align center border 1px
  • 当通过 Jquery 将当前页面的 html 传递到托管 bean 时,primefaces RemoteCommand 标记不起作用

    我正在使用 Jquery 的 html 方法获取当前页面的 HTML 如下所示
  • Position:fixed 内的position:fixed: 哪个浏览器是正确的?

    将固定元素放置在另一个固定元素内的行为在 Chrome Safari 与 Firefox 中有所不同 这个答案很好地解释了预期的行为 https stackoverflow com a 28576596 1437016对于相对 div 内的
  • 更新 Parse.com 中的一行

    我所拥有的是 当单击编辑按钮时 两个输入字段中的值将创建一个新行 并删除旧行 下面是我使用的代码 但我想要的是更新原始行而不是删除原始行 实例 http jsbin com uyonek 2使用下面的代码是如何工作的 editBtn onc
  • 文本区域值高度[重复]

    这个问题在这里已经有答案了 我有一个 textarea 其 css 高度设置为 85px 用户可能会在该文本区域内键入内容行 我想知道文本 值的高度 而不是文本区域本身 有没有办法检查内部文本的高度 包括换行符 我会将文本区域的内容复制到另
  • Chrome 扩展程序未加载 EventListener

    我一直在创建一个 chrome 扩展 它将我的新标签页分成 2 个框架 这样我就可以尝试加载 2 个不同的 URL 现在我开始很简单 但我无法让它们按预期加载 这是代码 背景 html
  • html 音频标签,持续时间总是无穷大

    我一直在研究使用 html 音频标签来播放一些音频文件 音频播放正常 但音频标签的持续时间属性始终返回无穷大 我尝试了接受的答案this https stackoverflow com questions 16849023 html5 au
  • 使用 XPath 获取内部有链接的段落文本

    我正在使用 XPath 解析 HTML 页面 并希望获取某些特定段落的完整文本 包括链接文本 例如我有以下段落 p class main content This is sample paragraph with a href http g
  • 为什么Disabled = true对于html有效?

    我注意到我们的代码中有一个disabled ture 我是锚标签的源代码 我想知道为什么它在 IE 中有效 我也在互联网上进行了搜索 通过网络搜索 它也被用于很多源代码中 我一直在搜索if ture 拼写错误的true也可以被IE使用 有人
  • 如何解决flash的zindex问题

    在网页中我需要显示div覆盖未使用的 Flash 横幅wmode transparent环境 怎么解决呢 根据我的记忆 你可以将 div 推入 也许使用Javascript 这样你就不会弄乱你的HTML iframe 是像 flash 一样
  • 使用时间序列数据和scaleBand指定D3条形图上的刻度

    我尝试为具有时间序列数据的 d3 v4 条形图指定多个刻度和多个刻度标签 如下图所示 基于本教程 https bl ocks org zigahertz 1ee4965ff76514517bb7ce6af21e5d44我有一个处理时间序列数
  • 如何使链接悬停时的背景图像模糊?

    当您用鼠标光标悬停链接时 我想让我的背景图像模糊 5 像素 有什么简单的方法可以实现这一点吗 我有点纠结于类和 id 在这里 pic background url http www metalinjection net wp content
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • html5 vs flash - 完整的比较图表在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 因此 自从史蒂夫 乔布斯说 Flash 很糟糕并暗示 HTML5 可以完成 Flash 可以做的所有事情
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何
  • HTML 布局:向现有网站添加侧边栏

    我有一个网站 其正文如下所示 div div div div div div 这些中没有使用绝对 相对定位技巧divs 但是有很多floats clears margins and padding这些风格divs 及其内部元素 所有这些都会
  • HTML标题属性样式[重复]

    这个问题在这里已经有答案了 如何在不使用 javascript 或 CSS 的情况下更改以下标记中标题属性的样式 因为我将 HTML 插入到原本无法编辑的文档中的特定位置 span title This is information Thi

随机推荐