【问题标题】:How to get the origin of iframe object如何获取 iframe 对象的来源
【发布时间】:2015-11-30 10:35:19
【问题描述】:

我需要获取 iframe 的来源。到目前为止,我们使用的代码创建了一个锚元素并读取它的来源,但该属性在 Internet Explorer 中不可用。从 iframe 对象获取原点的最优雅方法是什么?

这是旧代码:

function getOrigin(href) {
  var l = document.createElement("a");
  l.href = href;
  return l.origin;
};

var x = document.getElementById("my-iframe");
alert(getOrigin(x.src));

但正如我所说,Internet Explorer 不支持 origin 属性。

我需要支持 Internet Explorer 10 及更高版本。

【问题讨论】:

  • 我试图做这样的事情:x.contentWindow.location.origin 但由于 SOP 我无法访问它并且我无法添加 CORS。

标签: javascript jquery html iframe


【解决方案1】:

var x = document.getElementById("myiframe");
alert(new URL(x.src).origin);
<iframe id="myiframe" src="https://www.google.com/search?q=test"></iframe>

检查 src 是否为相对 url:How to test if a URL string is absolute or relative?

生成相对url的绝对url:Convert relative path to absolute using JavaScript

【讨论】:

    【解决方案2】:

    创建元素来解析字符串是很脏的。

    为什么不自己解析呢?

    'http://stackoverflow.com:8080/123?param=test'.match(/^.+\:\/\/[^\/]+\//)[0]
    

    如果您还想支持相对 url(例如 '/myurl'),只需添加一些条件来获取当前窗口的 URL:

    location.href.match...
    

    【讨论】:

    • 删除斜杠后document.getElementById("my-iframe").src.match(/^.+\:\/\/[^\/]+/)[0] 正是我所需要的!谢谢!
    • 只知道这仅适用于 http(s) URI,但不适用于 blob:、blank: 和 data: URI
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2019-03-11
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2011-11-26
    • 2013-04-17
    • 2014-11-28
    相关资源
    最近更新 更多