iframe onload事件

时间:2011-05-12 08:46:42

标签: javascript html

我有一段简单的代码:

<script>
function change(){document.getElementById("browse").src = document.getElementById("addr").value;}
function update(){document.getElementById("addr").value = document.getElementById("browse").src;}
<script>
<input type="text" id="addr"><input type="button" value="Go" onclick="change();">
<iframe id="browse" style="width:100%;height:100%" onload="update();"></iframe>

更新();在例如单击iframe中的链接并加载新页面。

有什么问题?

2 个答案:

答案 0 :(得分:7)

简短回答:您无法获得除您之外的任何域名的网页网址。您想要的URL可以获得:

document.getElementById("browse").contentWindow.location.href;

但是,只有在{em> 域上浏览网站时,才能使用此网址Same origin policy。它将是未定义的,如果您尝试任何其他域,您将收到安全错误。

所以,如果你想从其他域获取页面并且想要使用纯javascript来实现这一点,那么你就不能。

答案很长:可以使用服务器端代理加载iframe中请求的网址。类似的东西:

http://yourdomain.com/proxy.php?url=http://www.google.com/

然后在获取URL时获取url参数并将其放入“addr”输入中。

这种做法真的不值得做;您将使用大量带宽,并且您将向希望通过防火墙进行代理并滥用代理以满足其需求的人员开放您的站点。

答案 1 :(得分:6)

您可以在更改src后直接添加处理程序以使其正常工作:

function change(){
    document.getElementById("browse").src = document.getElementById("addr").value;
    document.getElementById("browse").onload = function (e){alert(e);}
}

看一下这个例子http://jsfiddle.net/xkBF3/