js設置document.domain實現(xiàn)跨域的注意點分析
本文實例分析了js設置document.domain實現(xiàn)跨域的注意點。分享給大家供大家參考。具體分析如下:
document.domain
用來得到當前網(wǎng)頁的域名。
比如在地址欄里輸入:
我們也可以給document.domain屬性賦值,不過是有限制的,你只能賦成當前的域名或者基礎域名。
比如:
javascript:alert(document.domain = "www.dbjr.com.cn"); //www.dbjr.com.cn
上面的賦值都是成功的,因為www.dbjr.com.cn是當前的域名,而jb51.net是基礎域名。
但是下面的賦值就會出來"參數(shù)無效"的錯誤:
javascript:alert(document.domain = "www.dbjr.com.cn"); //參數(shù)無效
因為cctv.net與www.dbjr.com.cn不是當前的域名也不是當前域名的基礎域名,所以會有錯誤出現(xiàn)。
這是為了防止有人惡意修改document.domain來實現(xiàn)跨域偷取數(shù)據(jù)。
利用document.domain 實現(xiàn)跨域:
前提條件:這兩個域名必須屬于同一個基礎域名!而且所用的協(xié)議,端口都要一致,否則無法利用document.domain進行跨域
Javascript出于對安全性的考慮,而禁止兩個或者多個不同域的頁面進行互相操作。
相同域的頁面在相互操作的時候不會有任何問題。
比如在:aaa.com的一個網(wǎng)頁(a.html)里面 利用iframe引入了一個bbb.com里的一個網(wǎng)頁(b.html)。
這時在a.html里面可以看到b.html里的內容,但是卻不能利用javascript來操作它。因為這兩個頁面屬于不同的域,在操作之前,js會檢測兩個頁面的域是否相等,如果相等,就允許其操作,如果不相等,就會拒絕操作。
這里不可能把a.html與b.html利用JS改成同一個域的。因為它們的基礎域名不相等。(強制用JS將它們改成相等的域的話會報跟上面一樣的"參數(shù)無效錯誤。")
所以如果在a.html里引入aaa.com里的另一個網(wǎng)頁,是不會有這個問題的,因為域相等。
有另一種情況,兩個子域名:
aaa.xxx.com
bbb.xxx.com
aaa里的一個網(wǎng)頁(a.html)引入了bbb 里的一個網(wǎng)頁(b.html),
這時a.html里同樣是不能操作b.html里面的內容的。
因為document.domain不一樣,一個是aaa.xxx.com,另一個是bbb.xxx.com。
這時我們就可以通過Javascript,將兩個頁面的domain改成一樣的,
需要在a.html里與b.html里都加入:
這樣這兩個頁面就可以互相操作了。也就是實現(xiàn)了同一基礎域名之間的"跨域"。
希望本文所述對大家的javascript程序設計有所幫助。
- jquery對象和javascript對象即DOM對象相互轉換
- JS、CSS以及img對DOMContentLoaded事件的影響
- javascript獲取dom的下一個節(jié)點方法
- Javascript基礎知識(三)BOM,DOM總結
- javascript學習筆記(三)BOM和DOM詳解
- 使用js Math.random()函數(shù)生成n到m間的隨機數(shù)字
- 通過JS動態(tài)創(chuàng)建一個html DOM元素并顯示
- 簡介AngularJS的HTML DOM支持情況
- javascript中html字符串轉化為jquery dom對象的方法
- 在javascript中隨機數(shù) math random如何生成指定范圍數(shù)值的隨機數(shù)
- JavaScript駕馭網(wǎng)頁-DOM
相關文章
解決window.opener=null;window.close(),只支持IE6不支持IE7,IE8的問題
本篇文章主要是對window.opener=null;window.close(),只支持IE6不支持IE7,IE8的解決方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01