我正在试图弄清楚是否可以以编程方式更改iFrame的沙箱值。
来自MDN iframe:
当嵌入文档与主页面具有相同的原点时,它就是 强烈建议不要同时使用allow-scripts和allow-same-origin 同时,因为它允许嵌入文档 以编程方式删除沙箱属性。虽然是 这个案例并不比不使用沙箱更安全 属性。
但是,更改父级中的属性不会成功触发沙盒,因为这会暗示孩子。
document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts');
该iFrame中加载的页面可以成功访问父级,如果沙盒正常工作则不会出现这种情况。该属性确实发生了变化,但安全性存在缺陷,因为它不会阻止对专利的访问。
console.log(window.parent.document);
上述内容仍适用于启用了“以编程方式”启用沙箱的iFrame。 Chrome和Firefox都是这种情况,这意味着无意的未记录功能或实施不当的规范。
任何人对什么是合适的期望都有任何想法?
答案 0 :(得分:0)
请尝试这个小提琴:http://jsfiddle.net/yAwxy/
运行脚本时它不起作用onLoad
b / c iframe已经在运行。
如果您尝试使用onDomready
,则应用沙盒进行b / c脚本尚未运行。
如果你使用这个小提琴记录:
<iframe id="myFrame" srcdoc="<script>console.log('Executing script inside iFrame')</script>">
</iframe>
在剧本中
console.log('Executing script inside page')
当脚本console.log('Executing script inside page')
被包裹onLoad
时,outpu是:
Executing script inside iFrame
Executing script inside page
当包裹onDomready
时:
Executing script inside page
Executing script inside iFrame
另见http://jsfiddle.net/yAwxy/1/。
因此,要更改规则,必须更改OndomReady
答案 1 :(得分:0)
尝试在沙盒iframe内的Internet Explorer中动态创建iframe内容时,我遇到了类似的问题。我尝试使用javascript在iframe已经创建并将内容放在iframe中(在src =属性中使用javascript:URI)之后使用javascript添加沙盒属性,但iframe似乎保留了它的属性在页面加载时出现。
在应用沙盒属性时,Internet Explorer似乎与FireFox或Chrome的工作方式不同。当设置sandbox =“allow-scripts”时,Chrome和FireFox将允许使用src = javascript:function()动态创建内容。 IE似乎在创建过程中应用sandbox属性中的唯一域,并将src = javascript:function()视为非同源,并且不允许动态创建iframe内容。
我不确定您为什么尝试以编程方式添加沙箱属性,但如果尝试仅使用动态源加载iframe,则可以使用srcdoc属性以及唯一问题的沙箱属性因为IE不支持srcdoc属性。
要回答您的问题,我认为无法加载iframe及其内容,然后在事实之后添加sandbox属性,并将iframe表现为沙盒iframe。