2012-07-25 43 views
7

我正在嘗試修改iframe的內容,但它不起作用。無法修改iframe的內容,出了什麼問題?

這是我的main.html中

<html> 
<head><title>Main page</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
</head> 
<body> 

<h3>Main page</h3> 
<iframe src="ifr.htm" id="ifr" name="ifr"></iframe> 
</body> 

<script> 
$(document).ready(function(){ 
    $('#ifr').load(function(){ 
     $('#ifr').contents().find('body').html('Hey, i`ve changed content of <body>! Yay!!!'); 
    }); 
}); 

</script> 
</html> 

這是我ifr.htm

<html> 
<head><title>Iframe page</title></head> 
<body> 
Content to be displayed in iframe ... 
</body> 
</html> 
+0

iframe獨立於正在顯示它的框架。要將更改(樣式/內容/等)應用於iFrame頁面,您需要編輯該頁面。 如果您確實編輯了該頁面但未看到更改,則可能只需清除該頁面的緩存即可。直接訪問iframe頁面並點擊刷新,直到看到更改 – ckaufman 2012-07-25 20:26:16

+0

您可以詳細說明「不工作」嗎?你有什麼錯誤嗎? – jbabey 2012-07-25 20:26:28

+0

[It's working here](http://jsfiddle.net/heera/HuuMZ/1/),內容正在改變。 – 2012-07-25 20:29:28

回答

13

請不要忘記cross-domain政策,否則將無法正常工作。

現場演示:http://jsfiddle.net/oscarj24/wTWjF/

(只知道,我沒有使用一個404頁,看看)

試試這個:

$(document).ready(function(){ 
    $('#ifr').ready(function(){ 
     $(this).contents().find('body').html('Hey, I have changed content of <body> Yay!'); 
    }); 
});​ 
2

假設你正在紀念跨域策略,這聽起來像一個時間問題。當父頁面的document.ready觸發時,您的iframe可能已經完成加載。

您可以嘗試將您的frame.load更改爲frame.ready,因爲.ready將在ready事件觸發後立即觸發。

+0

這聽起來似乎合理。 – 2012-07-25 20:38:28

+0

嘗試過,但它不起作用。 – Slay 2012-07-25 20:41:21

+0

它必須工作!這裏是一個例子http://jsfiddle.net/MBjjR/ – mabbas 2012-07-25 20:45:03

1

你會怎麼做像這樣:

您設置了src attri將iFrame插入空白頁(blank.htm)或「」,然後在準備好的處理程序中,將src更改爲ifr.htm

$(document).ready(
    $('#ifr').load(function(){ 
     $(this).contents().find('body').html('Hey, i`ve changed content of <body>! Yay!!!'); 
    }); 
    $('#ifr').attr("src", "ifr.htm"); 
});