1

我正在使用 JavaScript 制作一个小型 iframe 应用程序,但当有人单击 iframe 内的链接时,我似乎无法找到更新 URL 栏中的 URL 的方法。

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

我似乎找不到一个简单的属性来判断 url 何时更改,所以如果没有,那么以编程方式解决这个问题也可以。

谢谢您的帮助!

4

4 回答 4

1

首先,只有当你的 iframe 的源指向与父窗口相同的域时,你想要做的事情才有可能。因此,如果您有一个页面 page.html 与另一个页面 iframed.html 进行 iframe,那么它们都必须驻留在同一个域中(例如 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 中的链接时,url 栏会将链接的 url 放在 url 的“哈希标签”中(例如 www.example.com/page.html#http% 3A%2F%2Fwww.example.com%2FanotherPage.html)

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

完成后,您可以将此代码段放在 page.html 中,这将使 iframe 自动加载哈希标记中的 url:

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

不幸的是,我还没有运行这段代码来测试它,但它非常简单,应该解释这个想法。让我知道事情的后续!

于 2009-08-04T01:17:22.890 回答
1

您可以向 iframe 添加一个 onload 事件,然后对其进行监视 - 只要框架完成加载,它就会被抛出(当然,它可能再次是相同的 URL ...)

于 2009-08-04T11:25:15.290 回答
1

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

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

于 2009-08-04T00:15:07.140 回答
0

相反,您可以向框架的内容添加代码以使其向容器框架引发事件吗?

在 IE 中,“OnReadyStateChanged”事件可能会给你你想要的。

于 2009-08-03T23:42:50.113 回答