我有一个简单的测试页面:
<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中访问远程位置属性?
答案 0 :(得分:0)
为什么#2行导致异常而#1不是?
你有倒退。第1行抛出异常,第2行不抛出异常。
允许访问location
对象本身,但它上面的某些属性不是。
将其传递给console.log()
将整个内容传递给开发人员工具(不受信任的JS无法访问)。
将其传递给alert()
会隐式尝试将其转换为字符串,这是不允许的。