檢查掛馬防止網頁被嵌入框架的簡單代碼

美博園2012年9月5日】因為有的網站常常被人使用框架進行掛馬,怎樣檢查網站是否被掛馬,讓這些掛馬或者掛流量的網站現身?美博園轉載下面這段代碼主要是利用JS判斷框架來檢測網站是否被添加框架而進行掛馬或者掛流量的方法。

作者:阮一峰.

兩年前,我寫過一段代碼,防止網頁被嵌入框架(Frame)。


if (window!=top) // 判斷當前的window對象是否是top對象
top.location.href = window.location.href; // 如果不是,將top對象的網址自動導向被嵌入網頁的網址

這段代碼是有效的。但是,有一個問題:使用後,任何人都無法再把你的網頁嵌入框架了,包括你自己在內。

於是,我今天就在考量,有沒有一種方法,使得我的網頁只能被嵌入我自己的框架,而不是別人的框架?

表面上看,這個問題很簡單。只要做一個判斷:當前框架和頂層框架的網域是否相同,如果答案是否,就做了一個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嵌入了它的網頁中。這時,比較 top.location.hostname != window.location.hostname 會有什麼結果?

瀏覽器會提示代碼出錯!

因為它們跨域(cross-domain)了,瀏覽器的安全政策不允許222.com的網頁操作111.com的網頁,反之亦然。IE把這種錯誤叫做"沒有許可權"。進一步說,瀏覽器甚至不允許你查看top.location.hostname,跨域情況下,一看到這個對象,就直接報錯。

那麼,代碼應該如何修改?

事實上,這提示我們,只要查看top.location.hostname是否報錯就可以了。如果報錯了,表明存在跨域,就對top對象進行URL重導向;如果不報錯,表明不存在跨域(或者未使用框架),就不採取操作。

try{
  top.location.hostname;
}
catch(e){
  top.location.href = window.location.href;
}

這樣寫已經正確了,在IE和Firefox中可以正確運行。但是,Chrome瀏覽器會出現錯誤,不知為何,在跨域情況下,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;
}

好了,升級版代碼完成。除了本地網域以外,其他網域一律無法將你的網頁嵌入框架。我的Blog現在就使用這段代碼。

轉載自:https://www.ruanyifeng.com/blog/2010/08/anti-frameset_javascript_codes_continued.html

原文鏈接:https://allinfa.com/zh-tw/prevent-embedded-frame-code.html
原文標題:檢查掛馬防止網頁被嵌入框架的簡單代碼 - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。

這裡是你留言評論的地方


請留言


6 + 3 =
【您可以使用 Ctrl+Enter 快速發送】
Copyright © 2007 - 2026 , Design by 美博園. 著作權所有. 若有著作權問題請留言通知本站管理員. 【回到頂部】