我正在使用 JavaScript 制作一个小型 iframe 应用程序,但当有人单击 iframe 内的链接时,我似乎无法找到更新 URL 栏中的 URL 的方法。
它需要是即时的,最好不要每毫秒检查 document.getElementById('idofiframe').src 的值是否已更改。
我似乎找不到一个简单的属性来判断 url 何时更改,所以如果没有,那么以编程方式解决这个问题也可以。
谢谢您的帮助!
我正在使用 JavaScript 制作一个小型 iframe 应用程序,但当有人单击 iframe 内的链接时,我似乎无法找到更新 URL 栏中的 URL 的方法。
它需要是即时的,最好不要每毫秒检查 document.getElementById('idofiframe').src 的值是否已更改。
我似乎找不到一个简单的属性来判断 url 何时更改,所以如果没有,那么以编程方式解决这个问题也可以。
谢谢您的帮助!
首先,只有当你的 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;
}
}
不幸的是,我还没有运行这段代码来测试它,但它非常简单,应该解释这个想法。让我知道事情的后续!
您可以向 iframe 添加一个 onload 事件,然后对其进行监视 - 只要框架完成加载,它就会被抛出(当然,它可能再次是相同的 URL ...)
这将很难做到,因为它被认为是 xss 并且大多数浏览器都会阻止它。
很可能有一些涉及 AJAX 的解决方法。
相反,您可以向框架的内容添加代码以使其向容器框架引发事件吗?
在 IE 中,“OnReadyStateChanged”事件可能会给你你想要的。