為了防止其他網(wǎng)站使用框架(Frame)抄淑,將你的網(wǎng)頁嵌入它的網(wǎng)頁中吸耿。可以將下面一段簡單的Javascript代碼放入網(wǎng)頁源碼的頭部靖榕,別人就無法使用你的網(wǎng)頁了:
<script>
if(window!=top) //判斷當前的window對象是否top對象
{
//如果不是蓖谢,將top對象的網(wǎng)址自動導向被嵌入網(wǎng)頁的網(wǎng)址
top.location.href = window.location.href;
}
</script>
但這段代碼使用后,任何人都無法再把你的網(wǎng)頁嵌入框架了譬涡,包括你自己闪幽。
那有沒有一種方法,使得我的網(wǎng)頁只能只能嵌入我自己的框架涡匀,而不是別人的框架呢盯腌?
表面上看,這個問題很簡單陨瘩。只要做一個判斷:當前框架和頂層框架的域名是否相同腕够,如果答案是否级乍,就做一個URL重定向。
if(top.location.hostname != window.location.hostname){
top.location.href = window.location.href;
}
但是出乎意料的是帚湘,這樣寫是錯誤的玫荣,根本無法運行。
假定 top.location.hostname 是 www.111.com大诸,而 window.location.hostname 是 www.222.com捅厂。也就是說,111.com 把 222.com 嵌入了它的網(wǎng)頁资柔。這時比較 top.location.hostname != window.location.hostname 會有什么結(jié)果呢焙贷?
瀏覽器會提示代碼出錯。
因為它們跨域(cross-domain)了贿堰,瀏覽器的安全策略不允許 222.com 的網(wǎng)頁操作 111.com 的網(wǎng)頁辙芍,反之亦然。IE 把這種錯誤叫做“沒有權(quán)限”羹与。進一步說故硅,瀏覽器甚至不允許你查看 top.location.hostname,跨域情況下注簿,一看到這個對象契吉,就直接報錯。
那么诡渴,代碼應該如何修改捐晶?
事實上,這提示我們妄辩,只要查看 top.location.hostname 是否報錯就可以了惑灵。如果報錯,表明存在跨域眼耀,就對 top 對象進行 URL 重定向英支;如果不報錯,表明不存在跨域(或者未使用框架)哮伟,就不采取操作干花。
try{
top.location.hostname;
}catch(e){
top.location.href = window.location.href;
}
這樣寫已經(jīng)正確了,在 IE 和 Firefox 中可以正確運行楞黄。但是池凄,Chrome 瀏覽器會出現(xiàn)錯誤,不知為何鬼廓,在跨域情況下肿仑,Chrome 對 top.location.hostname 不報錯!
沒辦法,只能為了 Chrome尤慰,再加一段代碼馏锡。
try{
top.location.hostname;
if(top.location.hostname != window.location.hostname){
top.location.href = window.location.href;
}
}catch(e){
top.location.href = window.location.href;
}
好了,現(xiàn)在除了本地域名伟端,其它域名一律無法將你的網(wǎng)頁嵌入框架杯道。
<br />
來源:防止網(wǎng)頁被嵌入框架的代碼