即使iFrame的内容来自同一个来源,我如何阻止iFrame中的JavaScript访问外部网站的属性?

use*_*814 5 javascript iframe same-origin-policy

基本上我想要一个iFrame总是限制它的内容,好像它来自不同的域,即使内容来自同一个来源.

有没有办法做到这一点?

Jon*_*ray 10

最好的解决方案可能是在iframe上使用HTML5沙箱属性,该属性(默认情况下)显式禁用对父DOM的脚本和同源访问.

http://msdn.microsoft.com/en-us/hh563496.aspx上的好介绍

截至2012年12月,这似乎在大多数当前浏览器上都受支持.


小智 1

这将隐藏window.parent在子框架/窗口中,但不会隐藏在top属性中。

window.parent在子窗口/框架的 onload 事件结束之前,该属性仍然可以访问。

<html>
  <head>
    <style type="text/css">
      #wrapper {width:1000px;height:600px;}
    </style>
    <script type="text/javascript">
      window.onload = function() {
        var frm = document.getElementById('childFrame');
        var win = frm.contentWindow || (frm.contentDocument && frm.contentDocument.parentWindow) || (frm.document && frm.document.parentWindow);
        if (win) win.parent = null;
      }
    </script>
  </head>
  <body>
    <div id="wrapper">
      <iframe id="childFrame" src="child.html" frameborder="0" style="width:100%;height:100%;"></iframe>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)