document.domain
用來獲得當前網頁的域名。
好比在地址欄裏輸入:
javascript:alert(document.domain); //www.315ta.com
咱們也能夠給document.domain屬性賦值,不過是有限制的,你只能賦成當前的域名或者基礎域名。
好比:
javascript:alert(document.domain = "315ta.com"); //315ta.com
javascript:alert(document.domain = "www.315ta.com");//www.315ta.com
上面的賦值都是成功的,由於www.315ta.com是當前的域名,而315ta.com是基礎域名。
可是下面的賦值就會出來"參數無效"的錯誤:
javascript:alert(document.domain = "cctv.net"); //參數無效
javascript:alert(document.domain = "ttt.315ta.com"); //參數無效
由於cctv.net與ttt.315tas.com不是當前的域名也不是當前域名的基礎域名,因此會有錯誤出現。
這是爲了防止有人惡意修改document.domain來實現跨域偷取數據。
利用document.domain實現跨域:
前提條件:這兩個域名必須屬於同一個基礎域名!並且所用的協議,端口都要一致,不然沒法利用document.domain進行跨域
Javascript出於對安全性的考慮,而禁止兩個或者多個不一樣域的頁面進行互相操做。
相同域的頁面在相互操做的時候不會有任何問題。
好比在:aaa.com的一個網頁(a.html)裏面利用iframe引入了一個bbb.com裏的一個網頁(b.html)。
這時在a.html裏面能夠看到b.html裏的內容,可是卻不能利用javascript來操做它。由於這兩個頁面屬於不一樣的域,在操做以前,js會檢測兩個頁面的域是否相等,若是相等,就容許其操做,若是不相等,就會拒絕操做。
這裏不可能把a.html與b.html利用JS改爲同一個域的。由於它們的基礎域名不相等。(強制用JS將它們改爲相等的域的話會報跟上面同樣的"參數無效錯誤。")
因此若是在a.html裏引入aaa.com裏的另外一個網頁,是不會有這個問題的,由於域相等。
有另外一種狀況,兩個子域名:
aaa.xxx.com
bbb.xxx.com
aaa裏的一個網頁(a.html)引入了bbb 裏的一個網頁(b.html),
這時a.html裏一樣是不能操做b.html裏面的內容的。
由於document.domain不同,一個是aaa.xxx.com,另外一個是bbb.xxx.com。
這時咱們就能夠經過Javascript,將兩個頁面的domain改爲同樣的,
須要在a.html裏與b.html裏都加入:
document.domain = "xxx.com";javascript
這樣這兩個頁面就能夠互相操做了。也就是實現了同一基礎域名之間的"跨域"。css
對於主域相同而子域不一樣的例子,能夠經過設置document.domain的辦法來解決。具體的作法是能夠在http://www.a.com/a.html和http://script.a.com/b.html兩個文件中分別加上document.domain = ‘a.com’;而後經過a.html文件中建立一個iframe,去控制iframe的contentDocument,這樣兩個js文件之間就能夠「交互」了。固然這種辦法只能解決主域相同而二級域名不一樣的狀況,若是你異想天開的把script.a.com的domian設爲alibaba.com那顯然是會報錯地!代碼以下:html
www.a.com上的a.htmljava
document.domain = 'a.com'; var ifr = document.createElement('iframe'); ifr.src = 'http://script.a.com/b.html'; ifr.style.display = 'none'; document.body.appendChild(ifr); ifr.onload = function(){ var doc = ifr.contentDocument || ifr.contentWindow.document; // 在這裏操縱b.html alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue); };
script.a.com上的b.htmlnode
document.domain = 'a.com';
這種方式適用於{www.kuqin.com, kuqin.com, script.kuqin.com, css.kuqin.com}中的任何頁面相互通訊。跨域
備註:某一頁面的domain默認等於window.location.hostname。主域名是不帶www的域名,例如a.com,主域名前面帶前綴的一般都爲二級域名或多級域名,例如www.a.com實際上是二級域名。 domain只能設置爲主域名,不能夠在b.a.com中將domain設置爲c.a.com。安全