JS防止網(wǎng)頁(yè)被嵌入iframe框架的方法分析
本文實(shí)例講述了JS防止網(wǎng)頁(yè)被嵌入iframe框架的方法。分享給大家供大家參考,具體如下:
例如:
<script type="text/javascript"> if (window!=top) // 判斷當(dāng)前的window對(duì)象是否是top對(duì)象 top.location.href = window.location.href; // 如果不是,將top對(duì)象的網(wǎng)址自動(dòng)導(dǎo)向被嵌入網(wǎng)頁(yè)的網(wǎng)址 </script>
這段代碼是有效的。但是,有一個(gè)問(wèn)題:使用后,任何人都無(wú)法再把你的網(wǎng)頁(yè)嵌入框架了,包括你自己在內(nèi)。
于是,我今天就在考慮,有沒(méi)有一種方法,使得我的網(wǎng)頁(yè)只能被嵌入我自己的框架,而不是別人的框架?
表面上看,這個(gè)問(wèn)題很簡(jiǎn)單。只要做一個(gè)判斷:當(dāng)前框架和頂層框架的域名是否相同,如果答案是否,就做了一個(gè)URL重定向。
if (top.location.hostname != window.location.hostname) { top.location.href = window.location.href; }
但是,出乎意料的是,這樣寫是錯(cuò)誤的,根本無(wú)法運(yùn)行。你能看出,錯(cuò)在哪里嗎?
假定 top.location.hostname 是 www.111.com,而 window.location.hostname 是 www.222.com。也就是說(shuō),111.com把222.com嵌入了它的網(wǎng)頁(yè)中。這時(shí),比較 top.location.hostname != window.location.hostname 會(huì)有什么結(jié)果?
瀏覽器會(huì)提示代碼出錯(cuò)!
因?yàn)樗鼈兛缬颍╟ross-domain)了,瀏覽器的安全政策不允許222.com的網(wǎng)頁(yè)操作111.com的網(wǎng)頁(yè),反之亦然。IE把這種錯(cuò)誤叫做"沒(méi)有權(quán)限"。進(jìn)一步說(shuō),瀏覽器甚至不允許你查看top.location.hostname,跨域情況下,一看到這個(gè)對(duì)象,就直接報(bào)錯(cuò)。
那么,代碼應(yīng)該如何修改?
事實(shí)上,這提示我們,只要查看top.location.hostname是否報(bào)錯(cuò)就可以了。如果報(bào)錯(cuò)了,表明存在跨域,就對(duì)top對(duì)象進(jìn)行URL重導(dǎo)向;如果不報(bào)錯(cuò),表明不存在跨域(或者未使用框架),就不采取操作。
try{ top.location.hostname; }catch(e){ top.location.href = window.location.href; }
這樣寫已經(jīng)正確了,在IE和Firefox中可以正確運(yùn)行。但是,Chrome瀏覽器會(huì)出現(xiàn)錯(cuò)誤,不知為何,在跨域情況下,Chrome對(duì)top.location.hostname不報(bào)錯(cuò)!
沒(méi)辦法,只能為了Chrome,再加一段補(bǔ)充代碼。
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; }
好了,升級(jí)版代碼完成。除了本地域名以外,其他域名一律無(wú)法將你的網(wǎng)頁(yè)嵌入框架。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript操作iframe技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫(huà)特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》及《JavaScript遍歷算法與技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
cnblogs 代碼高亮顯示后的代碼復(fù)制問(wèn)題解決實(shí)現(xiàn)代碼
cnblogs是比較有名的技術(shù)博客基地,很多技術(shù)達(dá)人都在里面發(fā)布技術(shù)文章, 不過(guò)由于代碼不利于復(fù)制,因?yàn)轫?yè)面里面有pre標(biāo)簽等問(wèn)題2011-12-12js實(shí)現(xiàn)時(shí)鐘定時(shí)器
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)時(shí)鐘定時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03JavaScript實(shí)現(xiàn)存儲(chǔ)HTML字符串示例
這篇文章主要介紹了JavaScript存儲(chǔ)HTML字符串的具體實(shí)現(xiàn),需要的朋友可以參考下2014-04-04js中scrollTop()方法和scroll()方法用法示例
這篇文章主要介紹了js中scrollTop()方法和scroll()方法用法,結(jié)合實(shí)例形式分析了scrollTop()方法和scroll()方法滾動(dòng)操作的用法與相關(guān)操作技巧,需要的朋友可以參考下2016-10-10JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用
IIFE全拼Imdiately Invoked Function Expression,是一個(gè)在定義的時(shí)候就立即執(zhí)行的JavaScript函數(shù),這篇文章主要給大家介紹了關(guān)于Javascript立即執(zhí)行函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01如何實(shí)現(xiàn)移動(dòng)端瀏覽器不顯示 pc 端的廣告
隨著移動(dòng)網(wǎng)絡(luò)的發(fā)展,越來(lái)越多的人使用手機(jī)等移動(dòng)端瀏覽網(wǎng)頁(yè)辦公,那么如果在手機(jī)打開(kāi)頁(yè)面的時(shí)候顯示大大的聯(lián)盟廣告,用戶體驗(yàn)度會(huì)非常差,經(jīng)過(guò)一番研究,用下面的方法實(shí)現(xiàn)了移動(dòng)端瀏覽器不顯示PC端廣告。2015-10-10mint-ui的search組件在鍵盤顯示搜索按鈕的實(shí)現(xiàn)方法
這篇文章主要介紹了mint-ui的search組件在鍵盤顯示搜索按鈕的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10Dom 學(xué)習(xí)總結(jié)以及實(shí)例的使用介紹
本篇文章小編為大家介紹,Dom 學(xué)習(xí)總結(jié)以及實(shí)例的使用。需要的朋友參考下2013-04-04