- 相關(guān)推薦
Javascript實(shí)現跨域的要點(diǎn)分析
document.domain用來(lái)得到當前網(wǎng)頁(yè)的域名。
比如在地址欄里輸入:
代碼如下:
javascript:alert(document.domain); //
我們也可以給document.domain屬性賦值,不過(guò)是有限制的,你只能賦成當前的域名或者基礎域名。
比如:
代碼如下:
javascript:alert(document.domain = ""); //
javascript:alert(document.domain = ""); //
上面的賦值都是成功的,因為是當前的域名,而是基礎域名。
但是下面的賦值就會(huì )出來(lái)"參數無(wú)效"的錯誤:
代碼如下:
javascript:alert(document.domain = ""); //參數無(wú)效
javascript:alert(document.domain = ""); //參數無(wú)效
因為與不是當前的域名也不是當前域名的基礎域名,所以會(huì )有錯誤出現。
這是為了防止有人惡意修改document.domain來(lái)實(shí)現跨域偷取數據。
利用document.domain 實(shí)現跨域:
前提條件:這兩個(gè)域名必須屬于同一個(gè)基礎域名!而且所用的協(xié)議,端口都要一致,否則無(wú)法利用document.domain進(jìn)行跨域
Javascript出于對安全性的考慮,而禁止兩個(gè)或者多個(gè)不同域的頁(yè)面進(jìn)行互相操作。
相同域的頁(yè)面在相互操作的時(shí)候不會(huì )有任何問(wèn)題。
比如在:的一個(gè)網(wǎng)頁(yè)(a.html)里面 利用iframe引入了一個(gè)里的一個(gè)網(wǎng)頁(yè)(b.html)。
這時(shí)在a.html里面可以看到b.html里的內容,但是卻不能利用javascript來(lái)操作它。因為這兩個(gè)頁(yè)面屬于不同的域,在操作之前,js會(huì )檢測兩個(gè)頁(yè)面的域是否相等,如果相等,就允許其操作,如果不相等,就會(huì )拒絕操作。
這里不可能把a.html與b.html利用JS改成同一個(gè)域的。因為它們的基礎域名不相等。(強制用JS將它們改成相等的域的話(huà)會(huì )報跟上面一樣的"參數無(wú)效錯誤。")
所以如果在a.html里引入里的另一個(gè)網(wǎng)頁(yè),是不會(huì )有這個(gè)問(wèn)題的,因為域相等。
有另一種情況,兩個(gè)子域名:
aaa里的一個(gè)網(wǎng)頁(yè)(a.html)引入了bbb 里的一個(gè)網(wǎng)頁(yè)(b.html),
這時(shí)a.html里同樣是不能操作b.html里面的內容的。
因為document.domain不一樣,一個(gè)是,另一個(gè)是。
這時(shí)我們就可以通過(guò)Javascript,將兩個(gè)頁(yè)面的domain改成一樣的,
需要在a.html里與b.html里都加入:
代碼如下:
document.domain = "";
這樣這兩個(gè)頁(yè)面就可以互相操作了。也就是實(shí)現了同一基礎域名之間的"跨域"。
【Javascript實(shí)現跨域的要點(diǎn)分析】相關(guān)文章:
javascript跨域訪(fǎng)問(wèn)的方法07-09
JavaScript實(shí)現網(wǎng)頁(yè)刷新代碼段08-07
Javascript函數的定義和用法分析08-15
javascript分析運算符用法08-07
常用排序算法之JavaScript實(shí)現代碼段06-04
JavaScript 小型打飛機游戲實(shí)現和原理說(shuō)明08-18
javascript閉包的定義及應用實(shí)例分析08-25
有關(guān)javascript實(shí)現的多個(gè)層切換效果通用函數示例10-07