JS防止網(wǎng)頁被嵌入iframe框架的方法分析
本文實例講述了JS防止網(wǎng)頁被嵌入iframe框架的方法。分享給大家供大家參考,具體如下:
例如:
<script type="text/javascript"> if (window!=top) // 判斷當前的window對象是否是top對象 top.location.href = window.location.href; // 如果不是,將top對象的網(wǎng)址自動導向被嵌入網(wǎng)頁的網(wǎng)址 </script>
這段代碼是有效的。但是,有一個問題:使用后,任何人都無法再把你的網(wǎng)頁嵌入框架了,包括你自己在內(nèi)。
于是,我今天就在考慮,有沒有一種方法,使得我的網(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,跨域情況下,一看到這個對象,就直接報錯。
那么,代碼應(yīng)該如何修改?
事實上,這提示我們,只要查看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; }
好了,升級版代碼完成。除了本地域名以外,其他域名一律無法將你的網(wǎng)頁嵌入框架。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript操作iframe技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript數(shù)學運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript遍歷算法與技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
cnblogs 代碼高亮顯示后的代碼復制問題解決實現(xiàn)代碼
cnblogs是比較有名的技術(shù)博客基地,很多技術(shù)達人都在里面發(fā)布技術(shù)文章, 不過由于代碼不利于復制,因為頁面里面有pre標簽等問題2011-12-12js中scrollTop()方法和scroll()方法用法示例
這篇文章主要介紹了js中scrollTop()方法和scroll()方法用法,結(jié)合實例形式分析了scrollTop()方法和scroll()方法滾動操作的用法與相關(guān)操作技巧,需要的朋友可以參考下2016-10-10JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用
IIFE全拼Imdiately Invoked Function Expression,是一個在定義的時候就立即執(zhí)行的JavaScript函數(shù),這篇文章主要給大家介紹了關(guān)于Javascript立即執(zhí)行函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2023-01-01mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法
這篇文章主要介紹了mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法,需要的朋友可以參考下2017-10-10