有没有办法使用 iframe,但是当单击 iframe 中的内容到页面实际内容时,地址栏仍然会发生变化?我想在页面顶部有一个带有音乐播放器的水平栏,允许在浏览网站时播放音乐。但我也希望人们也能够轻松地为这些页面添加书签。
我已经搜索过,但找不到答案。许多人只是想更改 iframe 中加载的 URL……这不是我想要的。我希望更新浏览器中显示的实际地址栏。
这句话是为了帮助我达到最少 30 个字符。忽略这一点并阅读下一句以获得您的答案:
不。
更新:
“更改”和“重定向”是两个不同的东西。你需要弄清楚它是什么。“更改”地址栏是不可能的。“重定向”是可能的。
在 iframe 中单击标准链接不会自行影响最顶层的窗口。iframe 中的 Javascript 重定向的一个简单示例如下所示:
顶部窗户:
<html>
<head></head>
<body>
<iframe src="http://yoursite.com/iframe_test.html" />
</body>
框架测试:
<html>
<head>
<script>
window.onload = ready;
function ready()
{
document.getElementById("link1").onclick = linkClick;
document.getElementById("link2").onclick = linkClick;
}
function linkClick(e)
{
e.preventDefault();
window.top.location.href = this.href;
}
</script>
</head>
<body>
<a id="link1" href="http://youtube.com">Link1</a>
<a id="link2" href="http://facebook.com">Link2</a>
</body>
解释:
如果没有 Javascript,当您单击 iframe 中的链接时会发生什么,您将保留在原始页面上,并且 iframe 将被重定向到您单击的链接。以这种方式在 iframe 中使用 Javascript 可以强制最顶层的框架重定向。
我强烈反对以任何方式依赖它。一般来说,这是一种草率的编程,如果可能的话,我会完全远离 iframe。
是的,你可以,但这不是一个简单的解决方案,它有一些限制
您可以一起使用Web API 消息和历史 API来获得您想要的。
您可以使用上面的示例并将推送历史记录替换为window.location.replace
请将该片段视为获得所需内容的提示。上面的示例在安全性方面没有得到很好的考虑(即 iframe 脚本正在向父级发送消息,无论其来源如何)。