Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 切换iFrame沙箱_Javascript_Html_Iframe_Sandbox - Fatal编程技术网

Javascript 切换iFrame沙箱

Javascript 切换iFrame沙箱,javascript,html,iframe,sandbox,Javascript,Html,Iframe,Sandbox,我试图弄清楚是否可以通过编程方式更改iFrame的sandbox值 来自MDN: 当嵌入的文档与主页具有相同的来源时,它是 强烈不鼓励同时使用允许脚本和允许相同来源 同时,这允许嵌入的文档 以编程方式删除沙盒属性。虽然是 接受,这个案例并不比不使用沙箱更安全 属性 但是,更改父级中的属性不会成功触发子级中的沙盒 document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts'); 在该iFrame中加载的页面可

我试图弄清楚是否可以通过编程方式更改iFrame的sandbox值

来自MDN:

当嵌入的文档与主页具有相同的来源时,它是 强烈不鼓励同时使用允许脚本和允许相同来源 同时,这允许嵌入的文档 以编程方式删除沙盒属性。虽然是 接受,这个案例并不比不使用沙箱更安全 属性

但是,更改父级中的属性不会成功触发子级中的沙盒

document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts');
在该iFrame中加载的页面可以成功获得对父级的访问,如果沙箱工作,则不会出现这种情况。该属性确实会更改,但安全性存在缺陷,因为它不会阻止访问该专利

console.log(window.parent.document);
以上内容仍然在启用了“编程”沙箱的iFrame中工作。在Chrome和Firefox中都是这样,这意味着要么是预期的未记录的功能,要么是执行不当的规范

有人对什么是合适的期望有什么想法吗?

请试试这把小提琴: 当脚本运行
onLoad
b/c时,iframe不工作。 如果您尝试
onDomready
,沙箱将在脚本尚未运行的情况下应用。 如果您使用此小提琴记录:

<iframe id="myFrame" srcdoc="<script>console.log('Executing script inside iFrame')</script>">
</iframe>
当脚本
console.log('Executing script inside page')
被包装
onLoad
,输出为:

Executing script inside iFrame 
Executing script inside page 
当包装好onDomready时:

Executing script inside page 
Executing script inside iFrame 
另见


因此,要更改规则,必须在DomReady上更改它们

在尝试在沙盒iframe中的Internet Explorer中动态创建iframe内容时,我遇到了类似的问题。在iframe已经创建并将内容放置在iframe中(在src=属性中使用javascript:URI)之后,我尝试使用javascript添加沙盒属性,但iframe似乎保留了加载到页面时存在的属性

在应用沙盒属性时,Internet Explorer的工作方式似乎与FireFox或Chrome不同。当设置了sandbox=“allow scripts”时,Chrome和FireFox将允许使用src=javascript:function()动态创建内容。IE似乎在创建过程中应用了来自沙盒属性的唯一域,并认为src=javascript:function()不是同一来源,因此不允许动态创建iframe内容

我不知道您为什么试图以编程方式添加沙盒属性,但是如果只是尝试加载带有动态源的iframe,那么您可以使用srcdoc属性以及沙盒属性,唯一的问题是IE不支持srcdoc属性


为了回答您的问题,我认为不可能加载iframe及其内容,然后在事实之后添加sandbox属性,并使iframe表现为沙盒iframe

对不起,这不是我要问的。我在问是否可以切换沙盒安全属性,浏览器是否接受它们。很抱歉,再一次,但您不理解这个问题,这不是关于更改属性的值,这是关于浏览器实际实现更改的值和适当的沙盒安全措施,而他们现在不是。这不是一个简单的问题,所以除非您熟悉HTML5沙箱,否则您不太可能理解它。感谢您的尝试。只是要明确一点,如果您阅读了关于MDN的文章,可以通过编程方式更改沙盒属性,或者至少应该这样做,因为他们特别提到这是一种威胁。问题是它不起作用,因此这意味着没有威胁,但是,在实现中没有提到“加载”后沙箱更改将不会被强制执行或允许,这在Chrome和Firefox中都是如此。
Executing script inside page 
Executing script inside iFrame