同源策略和位置属性

时间:2016-08-05 11:23:35

标签: html html5

我有一个简单的测试页面:

<iframe src="http://www.w3schools.com" id="ifrm" style="height: 100px"></iframe>

...

<script>
document.getElementById('ifrm').onload = function() {
  try {             
    alert(frames[0].location);          // 1.
    console.log(frames[0].location);    // 2.
    var loc = frames[0].location;       // 3.
    alert(loc);                         // 4.
  } 
  catch (e) {
    alert("Error: " + e)
  }
}
</script>

根据&#34;同源政策&#34; - &#34;不允许从另一个来源读取#34;那么为什么#1行导致异常而#2不是? 为什么第3行是合法的而#4不是?我们是否只在#3中访问远程位置属性?

1 个答案:

答案 0 :(得分:0)

  

为什么#2行导致异常而#1不是?

你有倒退。第1行抛出异常,第2行不抛出异常。

允许访问location对象本身,但它上面的某些属性不是。

将其传递给console.log()将整个内容传递给开发人员工具(不受信任的JS无法访问)。

将其传递给alert()会隐式尝试将其转换为字符串,这是不允许的。