Firefox沙箱iframe位置在不应该发生变化时发生变化

Posted

技术标签:

【中文标题】Firefox沙箱iframe位置在不应该发生变化时发生变化【英文标题】:firefox sandbox iframe location changing when it shouldn't 【发布时间】:2014-03-01 05:39:30 【问题描述】:

使用 html5 沙盒 iframe 时,我希望 iframe 无法更改其位置:

<iframe sandbox="allow-forms allow-popups allow-pointer-lock allow-same-origin allow-scripts" class="iframe visible" src="thesource.html"  scrolling="auto" frameborder="0"></iframe>

它在 Chrome 中运行良好,但在 Firefox 中,沙盒 iframe 仍然可以重定向。

它是一个known bug,但我怎样才能修补它以使所有 Firefox 用户都不会被重定向?

【问题讨论】:

Iframes 通常是很好的沙盒,所以如果浏览器没有启用某些东西(或者被窃听并且不起作用),我认为不可能找到解决方法你。 你需要这个干什么?也许知道这将有助于找到确切的问题。 【参考方案1】:

例子:

有额外限制的:

<iframe src="demo_iframe_sandbox.htm" sandbox=""></iframe>

Internet Explorer 10、Firefox、Chrome 和 Safari 支持 sandbox 属性。

注意:Internet Explorer 9 及更早版本或 Opera 不支持沙盒属性。

定义和用法

如果指定为空字符串 (sandbox=""),则 sandbox 属性会为内联框架中的内容启用一组额外的限制。

沙盒属性的值可以是空字符串(应用所有限制),也可以是空格分隔的预定义值列表,这些值将删除特定限制。

HTML 4.01 和 HTML5 的区别

沙盒属性是 HTML5 中的新属性。

语法

<iframe sandbox="value">

属性值

    "" => 应用以下所有限制 allow-same-origin => 允许将 iframe 内容视为与包含文档来自同一来源 allow-top-navigation => 允许 iframe 内容从包含的文档中导航(加载)内容 allow-forms => 允许提交表单 allow-scripts => 允许脚本执行

javascript: 是一种奇怪的 URI 协议。它适用于某些上下文,例如,但不是全部 - 例如,窗口的位置不能设置为这样的 URI。 (虽然您可以将 javascript: URI 分配给 window.location 作为运行脚本的真正迂回方式,但窗口的位置不会保持设置为该值。)

要将内容写入 IFRAME,请获取对框架文档的引用并将其写入。这样做需要您设置 allow-same-origin 沙箱标志。

<iframe id="myframe" sandbox="allow-scripts allow-same-origin" src="about:blank"></iframe>

<script>
    var frame = document.getElementById("myframe");
    var fdoc = frame.contentDocument;

    fdoc.write("Hello world"); // or whatever
</script>

现场示例: http://jsfiddle.net/wUvrF/1/

【讨论】:

以上是关于Firefox沙箱iframe位置在不应该发生变化时发生变化的主要内容,如果未能解决你的问题,请参考以下文章

尝试用 React 制作 2048 游戏。状态中的数据在不应该发生变化时发生了变化

调整 iframe 大小时,如何防止 swf 刷新?

iframe 导航到书签位置在 Firefox 中不起作用

当 iframe 内容的高度发生变化时自动调整 iframe 高度(同域)

如何在不改变其内容位置的情况下弹出整个 Div

Firefox 在页面刷新时重新发布到 iframe