【发布时间】:2022-03-14 19:16:46
【问题描述】:
我有一个 HTML 文档,它的底部包含一个 iframe。
在这种情况下,iframe 嵌入了一个 Google 电子表格,代码如下:
<iframe id="gsheet-group" width="100%" height="400" src="https://docs.google.com/spreadsheets/d/<!----DOCUMENT_KEY----->/edit?usp=sharing&rm=minimal&gid=0&single=true&widget=false&chrome=false&headers=false">Loading sheet..</iframe>
我相信这个 iframe 包含一些 javascript,这些 javascript 在某些事件上会导致其 parent window to scroll to the top,例如当它的加载完成或它的内容以某些方式导航时。 (如果 iframe 嵌入到第二个 iframe 中,此行为仍然存在。)
如果我不能直接修改iframe的源代码,是否可以在iframe嵌入的内容中防止父窗口被javascript操作?
我尝试过的
感谢评论者的建议,遗憾的是,这些建议都没有解决问题:
- 将
sandbox="allow-scripts allow-forms allow-pointer-lock allow-same-origin"添加到<iframe>元素(以删除allow-top-navigation;@CBroe)。 - 覆盖
window.scrollTo(@Ryano) - 将 iframe 放入单独的 iframe (@Ryano)
【问题讨论】:
-
"此 iframe 包含一些 javascript ..." 删除脚本?
-
我认为无法编辑 iframe 的内容?
-
它是否在操纵父文档的 URL 哈希...?如果父页面启用了后者,这可能会导致“跳转”或平滑滚动 - 并且不受同源策略的限制,允许对父页面的位置进行写访问。在这种情况下,对 iframe 进行沙盒处理以删除
allow-top-navigation可能会有所帮助。 -
我同意@Cbroe,如果这不起作用,可以尝试在您的页面上覆盖 window.scrollTo?或添加一些 CSS 使您的页面不可滚动?或者变得很脏并将iframe放入另一个iframe中?任何适合:)
-
现在没时间检查了,但是 IIRC scrollIntoView 会让你的父页面滚动,即使从跨域 iframe 中调用也是如此。不知道如何防止这种情况发生。
标签: javascript html css iframe