获取 parent.location.url - iframe - 从孩子到父母

Posted

技术标签:

【中文标题】获取 parent.location.url - iframe - 从孩子到父母【英文标题】:get parent.location.url - iframe - from child to parent 【发布时间】:2011-05-23 17:46:59 【问题描述】:

我有一个显示在 iframe 中的页面。

我需要从该页面(子页面)获取带有 js 的 parent.location.url。

两个站点位于不同的域中。

我正在尝试:

警报(parent.location.url)

但我收到此错误:

http://parentdomain 从http://childdomain 获取属性 Location.URL 的权限被拒绝。

????有可能吗?

【问题讨论】:

你控制这两个域吗?如果是这样,可能。否则没有。 【参考方案1】:

使用postMessage 在窗口之间来回传递数据。这有点笨拙,但在让窗口跨源通信时需要。

【讨论】:

+1,因为这是使用 SharePoint 托管加载项部件时唯一有效的解决方案。 document.referrer 不起作用,并且无法从添加部分中访问从主机 Web 设置 iframe src 属性。我都试过了,这个效果很好。谢谢!【参考方案2】:

你想要做的事情本身是不可能的。除非您可以控制父页面对子页面的调用。如果这样做,那么您可以在父页面的 URL 中使用 get 语句调用子页面。因此,如果您的父页面是 http://parentpage.com,那么您应该如何调用 iFrame。

<iframe src='http://childpage.com/?parent=http://parentpage.com' />

那么你在子页面中获取引用所要做的就是获取字符串

window.location.search //not sure of browser compatibility with this

并通过从该字符串中抓取父页面的 URL 来提取它。我会提供更多细节,但我什至不确定我的第一个问题。

【讨论】:

我尝试了这里列出的所有其他方法。现在在 2015 年,由于相当严格的浏览器权限问题阻止了这种情况下的 javascript。将数据传递给 url 中的 iFrame 是唯一的方法。 这不是一个好的做法,因为任何域都可以像上面那样添加搜索参数,然后 iframe 中的子页面可能会被引导相信它来自列入白名单的父页面。简而言之,如果你这样做,不仅parentpage.com,而且 evilpage.com 也将能够制作这样的 iframe,并且 childpage 将父页面解析为 parentpage.com。这将是一个很大的安全漏洞。孩子将无法使用 window,parent.location.origin (跨域父),因为它会引发异常。出于安全目的,它是这样实现的。最好的选择是使用 document.referrer。【参考方案3】:

这样就可以找到了,应该所有浏览器都能支持:

query = window.parent.location.search.substring(1);

你不应该得到权限错误,但我可能错了。

【讨论】:

【参考方案4】:

试试这个:

var referrer = document.referrer;
alert(referrer);

【讨论】:

谢谢,在所有建议的解决方案中,当 iframe 与调用页面位于不同的域时,这是唯一一个给我信息的解决方案。 出于域名原因喜欢这个解决方案,但它没有获得完整的 URL。它缺少 window.location 将返回的哈希变量。 这在IE11上好像不行,有IE的解决方案吗? HTTPS的时候可以做referrer吗?有吗? 正在寻找一种在 CodePen 中访问浏览器 URL 的方法(Pens 在 iF​​rames 中)。这允许我在 CodePen 仪表板页面上不设置自动对焦。这非常有效。 if (document.referrer !== 'https://codepen.io/KeithDC/' &amp;&amp; document.referrer !== 'https://codepen.io/KeithDC') this.textInput.focus(); 【参考方案5】:

试试:

var pathname = window.parent.location.href

【讨论】:

【参考方案6】:

在父页面和 iframe 位于同一域中时才有效。如果它们不在同一个域中,您可以尝试通过 src 传递位置,就像 Madison Williams 建议的那样。

这可能就是您收到“权限被拒绝...”的原因

【讨论】:

【参考方案7】:

您是否尝试过类似的方法:

alert(window.top.location.href);

【讨论】:

我无法控制父页面:S 如果您只是想查看引荐来源网址,(这将是加载该框架的人)您是否尝试过类似的方法: if (document.referrer != '') document.write( '感谢访问' + document.referrer);

以上是关于获取 parent.location.url - iframe - 从孩子到父母的主要内容,如果未能解决你的问题,请参考以下文章

iOS ---------- 获取设备的各种信息

java反射获取属性值

Shell 获取路径

iOS 获取文件大小

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

js如何获取时间点?