2010-12-17 56 views
1

因此,我們正在加載一個頁面在iframe中。此子頁面從與父項相同的域上的緩存中加載。但是,外部資源不會在本地緩存,而是從外部網站加載 - 包括JavaScript。在一個網站,我們有框架剋星代碼:通過訪問頁面源防止幀破壞

if (top.location != self.location) { 

    top.location = self.location 
} 

現在我知道,我們可以使用該解決方案從coderr但我不知道是什麼含義/問題上磕。考慮到我們有權訪問緩存的子頁面,我想知道是否有任何我們可以添加到子項的方法來覆蓋任何方法或值,以便使框架渲染爲null。 E.g在孩子的<head>我嘗試添加此:

<script type="text/javascript"> 
    top.location = self.location 
</script> 

self.location = top.location 

漂亮的可怕結果(無限嵌套在第一個例子,在第二個完全徹底崩潰的瀏覽器)。

是否有任何建議我們可以添加到孩子的代碼來取消這個framebusting?

否則,我們將不得不緩存js並解析/替換framebusting腳本。

感謝

R.

並請 - 這是合法的!

+0

這已被問了一堆http://stackoverflow.com/search?q=prevent+frame+breaking – epascarello 2010-12-17 16:26:06

+1

@Epascarello - 這些我認爲大部分是從第三方網站加載頁面,而不是從具有訪問子頁面源的相同域。 – 2010-12-17 16:31:00

回答

0

簡單的文本替換Tampermonkey

document.body.innerHTML = document.body.innerHTML.replace(/original/g,"new"); 

如果使用正則表達式版本(替換文檔中所有出現),那麼你需要轉義特殊字符,如/"\符號。

僅更換一個發生:

var find = "if (top.location!=location) { top.location.href = location.href; }"; 
replace = ""; 
document.body.innerHTML = document.body.innerHTML.replace(find,replace); 

這會不會對有<script>在最高層,同比頭的網頁。

確保設置了@run-at document.start