0

设想:

  1. domain1.com 托管 domain2.com 的 iFrame。

  2. domain2.com 正在使用 javascript 来触发需要路由到父窗口的动态链接。

  3. 链接都是相对路径。

  4. 单击 /linkA.html(在 domain2.com 上的 iframe 中)将父级路由到 domain1.com/linkA.html。

    var _generic = "/linkA.html";

        $("#canvas").each( function () {
            $(this).children("a").attr("href",_generic);
            $(this).click( function(e) {
                e.preventDefault();
                window.parent.location.href = _generic;
            } );
        } );
    

将链接更改为绝对 (domain2.com/linkA.html) 可以解决功能问题。

有没有人遇到过这个?

4

4 回答 4

1

您应该尝试使用window.opener.location而不是window.parent.location.

于 2011-07-13T19:59:58.267 回答
1

为了让浏览器在设置相对路径时解析整个url,首先需要读取当前的href,这被SOP阻止了。

但我很确定,如果您使用parent.location而不是parent.location.href,那么这将正常工作。

于 2011-07-13T19:25:41.470 回答
0

我已经看到 IE9 与 IE8、FireFox 和 Webkit 的区别。考虑以下代码:

父源:

<!DOCTYPE html>
<html>
<head><title>iframe test page</title></head>
<body>
    <h1>Parent window</h1>
    <iframe src="//domain2/iframe.html"></iframe>
</body>
</html>

iframe 源(在单独的域上):

<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
    <h1>iframe content</h1>
    <script>function redirect() { window.parent.location = "/new-href"; } </script>
    <a href="javascript:redirect()">Redirect the parent window please</a>
</body>
</html>

如果主页在 IE8 中打开(或 IE9 设置为在 IE8 模式或 Chrome 23 或 FF16 下运行)单击链接会导致导航到 //(iframe domain)/new-href 而在 IE9 中则会转到 //(original父域)/new-href

我仍在研究如何解决这个问题,如果/当我有更多信息时,我会更新这个问题。

更新:为 iframe 链接设置 target="_top" 属性可以解决这个问题。

更新的 iframe 源(在单独的域上):

<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
    <h1>iframe content</h1>
    <a href="/new-href" target="_top">Redirect the parent window please</a>
</body>
</html>

单击此更新的 iframe 代码中的链接会将父(整个)窗口重定向到 IE8 和 IE9 中的 //(iframe domain)/new-href(据我所知,所有浏览器也是如此)。这就是你想做的,对吧?

例如,如果您想让 iframe 中的所有标签导致顶部/主/父窗口在某处导航,而不是 iframe 在某处导航,则使用以下内容:

$("iframe a").attr("target", "_top");

另请参阅目标属性文档

于 2012-11-12T16:31:37.777 回答
0

URL 中的正斜杠隐式文件夹在 Moz 中有效。浏览器,但对于资源管理器,来自同一文件夹的链接不会放置正斜杠。它只是 X 浏览器的语法。您可能做得更好 ./ (与资源管理器一起使用点正斜杠,但正确的方法是在同一文件夹 URL 的文件名之前没有斜杠)。

于 2019-11-18T06:56:10.783 回答