http://www.cyb.com/iframe.html
<!DOCTYPE HTML>
<html ><body>
<script type="text/javascript" src="jquery-1.10.2.js"></script>
<script type="text/javascript">
document.domain="cyb.com"
</script>
<iframe src="http://zym.cyb.com/1.html" id="w"></iframe>
<script type="text/javascript">
document.getElementById('w').οnlοad=function(){
document.getElementById('w').contentWindow.fn()
}
/*setTimeout(function(){console.log(document.getElementById('w').contentWindow.a)},1000)*/
</script>
</html>
http://zym.cyb.com/1.html
<!DOCTYPE HTML>
<html >
<body >
<script type="text/javascript" src="jquery-1.10.2.js"></script>
</body>
<script type="text/javascript">
document.domain="cyb.com"
window.fn=function(){
$.ajax({
url:"http://zym.cyb.com/",
type:'get'
})
}
</script>
</html>
以上代码可以实现在iframe中调用1.html的fn函数,有几个地方需要注意的:
1,首先要设置document.domain=cyb.com。
2,iframe和iframe标签后面的js代码是同时执行的,如果我们不用onload方法 ,可能调用fn会失败,因为iframe还没有加载完,这个通过不用onload方法在js里直接调用iframe的fn和使用setTimeout后(我设置的是一秒)调用iframe的fn可以看出来,打开F12下的network我们可以看到提示request is not finished yet。所以我们要使用onload确保iframe已经加载进来。
3,iframe里面ajax使用的url要和iframe的url是同域。
顺便说一下,父html里使用iframe的变量用iframe.contentWindow.变量名,iframe使用父html的变量使用parent.变量名。