【问题标题】:Changing address bar when using iframe使用 iframe 时更改地址栏
【发布时间】:2012-07-26 03:12:58
【问题描述】:

有没有办法使用 iframe,但在单击 iframe 内的内容时地址栏仍会更改为页面实际内容?我想在页面顶部有一个带有音乐播放器的水平栏,允许在浏览网站时播放音乐。但我也希望人们也能够轻松地为这些页面添加书签。

我已经搜索过,但找不到答案。许多人只是想更改 iframe 中加载的 URL……这不是我想要的。我希望更新浏览器中显示的实际地址栏。

【问题讨论】:

    标签: url iframe


    【解决方案1】:

    这句话是为了帮助我达到最少 30 个字符。忽略这一点并阅读下一句以获得您的答案:

    没有。

    更新:

    “改变”和“重定向”是两个不同的东西。你需要弄清楚它是什么。 “更改”地址栏是不可能的。 “重定向”是可能的。

    从 iframe 中单击标准链接不会影响其自身的最顶层窗口。一个 iframe 中 Javascript 重定向的简单示例如下所示:

    顶部窗口:

    <html>
    <head></head>
    <body>
        <iframe src="http://yoursite.com/iframe_test.html" />
    </body>
    

    IFRAME 测试:

    <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。

    【讨论】:

    • 好的,关于如何实现这一点有什么建议吗?阿贾克斯? jQuery?显然有一种方法可以做到这一点,因为其他网站已经实现了。我不会在这里回答“不”。
    • 脸书?查看顶部栏和包含广告的侧边栏。 YouTube?播放列表。最后一个.fm?音乐播放器。 Grooveshark.com?整个网站。
    • 这些页面包含 iframe,而 iframe 又包含链接。当您单击链接时,您将被定向到链接告诉您去的确切位置。在这些示例中,没有 Javascript、AJAX 或任何神奇地改变您的地址栏的东西。如前所述:您不能使用 AJAX 或 Javascript 更改地址栏。
    • 如果你想从 iframe 重定向,那么你需要查看 window.top.location
    【解决方案2】:

    是的,你可以,但这不是一个简单的解决方案,它有一些限制

    变化

    你可以同时使用Web API messageshistory API来得到你想要的。

    示例

    Jsfiddle

    重定向

    您可以使用上面的示例并将推送历史记录替换为window.location.replace

    请把 sn-p 当作一个提示来得到你想要的。上面的示例没有很好地考虑安全性(即 iframe 脚本正在向父级发送消息,无论其来源如何)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多