【问题标题】:Possible to get an iframe's url cross-domain?可以跨域获取 iframe 的 url 吗?
【发布时间】:2017-05-31 17:48:36
【问题描述】:

如果是跨域 iframe,如何在页面加载时获取 iframe 的当前 url?

背景 - 我正在尝试在我的网站上启用 SSL。但是,我的用户需要能够通过 iframe 加载任何 url。如果他们尝试使用 http 协议加载 iframe,它将拒绝加载,因为父页面是 https。

我想自动检测 iframe 是否为 http - 如果是,则将父页面重定向到 http。但是,使用我尝试过的任何方法,访问时都会出现 CORS 错误。

这是我的 iframe:

<iframe id="myframe" src='https://apple.com' onload="this.contentWindow.parent.postMessage(this.contentWindow.document.location.protocol, parent.document.location);" width="800" height="600">
</iframe>

这是我的事件监听器:

window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
  console.log(event.data)
}

我能够接收纯字符串作为消息,但我无法接收协议。我使用 window.postMessage() 的结果是一个 CORS 错误,我认为它应该允许跨域通信。

【问题讨论】:

    标签: javascript html iframe


    【解决方案1】:

    不可能,出于安全原因,您无法访问 iframe 的其他域/主机/端口内容或 src url

    【讨论】:

    • 对 - 但我认为这就是 .postMessage() 的用途 - 绕过 CORS 限制?
    • 但是你不能从不是你写的页面发送消息(比如 apple.com)
    • 如果我将.postMessage() 中的第一个参数替换为任何字符串,那么页面确实会收到来自 iframe 的消息。所以它肯定可以发送消息..它显然无法读取文档对象。 iframe 能够从服务器获取 http 响应,所以我认为它应该有一种方法可以发送带有重定向到的 url 的无害字符串?我相信你是对的,但我仍然会等待几个小时才能选择最佳答案,以防万一有人有聪明的把戏
    • 要访问你需要在 iframe 脚本中运行的位置,这意味着你需要苹果来发送消息。
    • 你可以捕捉到控制台的调用......但如果你可以的话,这太可怕了!我认为编写它的控制台是来自 iframe 的控制台,所以你不能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2011-03-06
    • 2018-07-02
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多