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 游戏。状态中的数据在不应该发生变化时发生了变化