2012-07-25 50 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"); 
});