window.parent.location.href IE9 Bug?

发布于 2024-11-24 04:02:13 字数 606 浏览 2 评论 0原文

场景:

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

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

  3. 链接都是相对路径。

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

    var _generic = "/linkA.html";

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

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

以前有人遇到过这个吗?

Scenario:

  1. domain1.com hosts an iFrame of domain2.com.

  2. domain2.com is using javascript to trigger dynamic links that need
    to route to the parent window.

  3. The links are all relative paths.

  4. Clicking on /linkA.html (in iframe on domain2.com) routes the parent to
    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;
            } );
        } );
    

Changing the links to absolute (domain2.com/linkA.html) solves the functional problem.

Has anyone run into this before?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜访吸血鬼 2024-12-01 04:02:14

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

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

In order for the browser to resolve the entire url when setting relative paths, it first needs to read the current href, and this is blocked by the SOP.

But I am pretty sure that if you use parent.location instead of parent.location.href, then this will work just fine.

尐偏执 2024-12-01 04:02:14

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

You should try using window.opener.location instead of window.parent.location.

闻呓 2024-12-01 04:02:14

我发现 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(或设置为在 IE8 模式或 Chrome 23 或 FF16 下运行的 IE9)中打开主页,则单击链接会导航到 //(iframe域)/new-href 而在 IE9 中它会转到 //(原始父域)/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 和 //(iframe 域)/new-href IE9(据我所知,还有所有浏览器)。这就是你想做的,对吧?

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

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

另请参阅 目标属性文档

I have seen a difference in IE9 vs. IE8, FireFox, and Webkit. Consider the following code:

Parent source:

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

iframe source (on separate domain):

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

If the main page is opened in IE8 (or IE9 set to run in IE8 mode or Chrome 23 or FF16) clicking the link results in navigating to //(iframe domain)/new-href whereas in IE9 it goes to //(original parent domain)/new-href

I am still investigating how to work around this issue and will update this if/when I have more information.

UPDATE: Setting the target="_top" attribute for iframe links works around this problem.

Updated iframe source (on separate domain):

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

Clicking the link in this updated iframe code will redirect the parent (entire) window to //(iframe domain)/new-href in both IE8 & IE9 (and, as far as I know, all browsers as well). That is what you want to do, right?

e.g. If you want to make all tags in an iframe cause the top/main/parent window to navigate somewhere rather than the iframe navigating somewhere then use something like this:

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

See also target attribute documentation

那一片橙海, 2024-12-01 04:02:14

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

The forward slash implicit folder in the URL works in Moz. browsers, but with explorer, links from the same folder don not put the forward slash.
It's simply X-browser syntax.
You may have done better puting ./ (dot forward slash with explorer but the proper way is no slash preceding the filename for a same folder URL).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文