当iframe位于新网址时告知

时间:2009-08-03 23:37:31

标签: javascript html iframe src

我正在使用JavaScript制作一个小型iframe应用程序,而且我似乎无法找到一种方法来更新我在我点击iframe内部链接时创建的网址栏中的网址。

它需要是瞬时的,并且最好不要每毫秒检查document.getElementById('idofiframe')。src的值是否已经改变。

我似乎找不到一个简单的属性来告诉url何时发生了变化,所以如果没有,那么以编程方式解决这个问题也会有效。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

这很难做到,因为它被认为是xss而且大多数浏览器会阻止它。

很可能有一些涉及AJAX的解决方法。

答案 1 :(得分:1)

首先,只有当iframe的源指向与父窗口相同的域时,才可能执行此操作。因此,如果您有一个页面page.html iframe另一个页面iframed.html,那么它们都必须驻留在同一个域中(例如www.example.com/page.html和www.example.com/iframed.html)

如果是这种情况,您可以在iframed.html页面中执行以下操作:

<script type="text/javascript">
window.onload = function() {
    var links = document.getElementsByTagName('a');
    for (var i=0, link; link = links[i]; i++) {
        link.onclick = function() {
            window.parent.location.href = '#' + encodeURIComponent(this.href);
        }
    }
}
</script>

这样,只要您点击iframed.html中的链接,网址栏就会将链接的网址放在网址的“哈希标记”中(例如www.example.com/page.html #HTTP%3A%2F%2Fwww.example.com%2FanotherPage.html)

显然,你必须在每个要出现在iframe内的页面上都有这样的脚本。

一旦到位,您就可以将此代码段放在page.html中,它会使iframe自动加载哈希标记中的网址:

window.onload = function() {
    var url = window.location.hash.substr(1);
    if (url) {
        document.getElementById('iframe').src = url;
    }
}

我很遗憾没有运行此代码来测试它,但它非常直接,应该解释这个想法。让我知道它是怎么回事!

答案 2 :(得分:1)

你可以向iframe添加一个onload事件,然后监视它 - 每当帧完成加载时它都会被抛出(当然,它可能会再次出现相同的URL ...)

答案 3 :(得分:0)

相反,您是否可以将代码添加到框架的内容中,以便将事件引发到容器框架?

在IE中,“OnReadyStateChanged”事件可能会为您提供所需的内容。