1. 程式人生 > >前端開發,面試筆試題學習---通訊/原理02

前端開發,面試筆試題學習---通訊/原理02

1、跨域方面:iframe/cookie

cookie:cookie式伺服器寫入瀏覽器的一小段資訊。只有同源的網頁才能共享。但是兩個網頁一級域名相同。只是二級域名不同瀏覽器允許通過設定document.domain共享cookie。

舉例來說,A網頁是http://w1.example.com/a.html ,B網頁是http://w2.example.com/b.html,那麼域名相那麼只要設定相同的document.domain,兩個網頁就可以共享cookie。

document.domain = 'example.com';
現在A網頁通過一個指令碼設定一個cookie
document.cookie = "test1=hello";
B網頁就可以讀到這個cookie
var allCookie = document.cookie;
注意:這種方式只適用於cookie和iframe視窗,localstorage和indexDB無法這種效果規避同源策略,而要使用postmessageAPI。

另外:伺服器可以在設定cookie的時候,指定cookie所屬域名為以及域名,例如:example.com。

Set-Cookie: key=value; domain=.example.com; path=/
這樣的話二級三級域名不用做任何設定就可以直接讀取這個cookie。

iframe:

如果兩個頁面不同源,就無法拿到對方的dom。最典型的例子就是iframe和window.open開啟的視窗。他們與父視窗無法通訊。

例如:父視窗執行下面的命令,如果iframe不是同源就會報錯。

document.getElementById("myIFrame").contentWindow.document
// Uncaught DOMException: Blocked a frame from accessing a cross-origin frame.
上面命令中,父視窗想要獲取子視窗的DOM,因為跨源導致錯誤。

反之亦然,子視窗獲取主視窗的 DOM也會出錯。

window.parent.document.body
// 報錯
如果兩個視窗一級域名相同,只是二級域名不同,那麼設定上一節的domain屬性就可以規避同源政策。拿到DOM。