jos*_*ght 5 html javascript iframe sandbox
我试图弄清楚是否可以以编程方式更改 iFrame 沙箱的值。
来自 MDN iframe:
当嵌入文档与主页具有相同来源时,强烈建议不要同时使用allow-scripts 和allow-same-origin,因为这会允许嵌入文档以编程方式删除沙箱属性。虽然可以接受,但这种情况并不比不使用沙箱属性更安全。
但是,更改父级中的属性不会成功触发沙箱,因为这会在子级中触发。
document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts');
Run Code Online (Sandbox Code Playgroud)
该 iFrame 中加载的页面可以成功访问父级,如果沙箱正常工作,则不会出现这种情况。该属性确实发生了变化,但安全性存在缺陷,因为它不会阻止对专利的访问。
console.log(window.parent.document);
Run Code Online (Sandbox Code Playgroud)
上述内容在“以编程方式”启用沙箱的 iFrame 中仍然有效。Chrome 和 Firefox 都是这种情况,这意味着要么是未记录的预期功能,要么是规范实施不当。
有人知道什么是适当的期望吗?
请尝试这个小提琴:http://jsfiddle.net/yAwxy/onLoad当脚本运行b/c iframe 已经工作
时它不起作用。如果您尝试onDomready,则会在脚本尚未运行时应用沙箱。如果您使用这个小提琴登录:
<iframe id="myFrame" srcdoc="<script>console.log('Executing script inside iFrame')</script>">
</iframe>
Run Code Online (Sandbox Code Playgroud)
并且在剧本中
console.log('Executing script inside page')
Run Code Online (Sandbox Code Playgroud)
当脚本console.log('Executing script inside page')被包装时onLoad,输出是:
Executing script inside iFrame
Executing script inside page
Run Code Online (Sandbox Code Playgroud)
包裹时onDomready:
Executing script inside page
Executing script inside iFrame
Run Code Online (Sandbox Code Playgroud)
另请参阅http://jsfiddle.net/yAwxy/1/。
所以要改变规则,就必须改变 OndomReady