2016-08-05 42 views
-1

我有一個簡單的測試頁:相同的起源和位置屬性

<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> 

據「相同的起源」 - 「這是不允許從其它產地改爲」那麼,爲什麼線#2是否會導致異常,而#2則不會? 爲什麼第3行是合法的,而第4行不是?我們不僅僅在#3中訪問遠程位置屬性嗎?

回答

0

爲什麼#2行會導致異常而#1不是?

你有這個倒退。第1行引發異常,第2行不引發異常。


location對象本身被允許訪問,但是在其上的某些性質都沒有。

將它傳遞給console.log()將整個事情傳遞給開發人員工具(它在不受信任的JS範圍之外)。

將它傳遞給alert()隱式地嘗試將其轉換爲字符串,這是不允許的。

+0

Thx。回覆。是的,對不起,我確實混淆了線路。但是#3和#4的線條呢?我是對的,將位置對象分配給變量是允許的,所以第3行是確定的,但是像第1行那樣在#4行輸出它是禁止的? – MulliGan81

+0

@ MulliGan81 - 第3行:「允許訪問位置對象本身,但其上的某些屬性不允許。」 - 您只是訪問位置對象本身。這很好。 – Quentin

+0

@ MulliGan81 - 第4行:「傳遞給alert()隱式地嘗試將它轉換爲字符串,這是不允許的。」 – Quentin