【问题标题】:javascript: check if iframe url is same domain or something externaljavascript:检查 iframe url 是否是同一个域或外部的东西
【发布时间】:2011-11-17 02:02:46
【问题描述】:

我知道我无法访问显示来自另一个域的页面的 iframe 中的数据。这很好,但我想检测 iframe 当前是否显示来自我的域或外部的页面。

我的第一次尝试是尝试访问

$('iframe')[0].contentWindow.document

包裹在try {} catch {} 中,如果抛出错误意味着我无法访问它,因此 iframe 页面必须是外部的。 这听起来像是一个完美的解决方案,但问题是 safari 向 javascript 控制台发布了“不安全的 JavaScript 尝试使用 URL 访问框架”消息。 这不仅丑陋,而且可能导致其他或未来的浏览器向用户显示明确的安全警告?

【问题讨论】:

  • 您的解决方案似乎完全有效。不要注意来自 Safari 的噪音,这些噪音对最终用户是不可见的。
  • 顺便提一下,当您加载 www.apple.com 时,您还会在 Safari 控制台中收到警告。警告通常不用担心(尽管它们可能非常烦人,恕我直言,应该是控制台应该允许您过滤的东西。)
  • thanx,我现在就这样吧。

标签: javascript iframe same-origin-policy


【解决方案1】:

你可以试试postMessage吗?

如果没有响应,则为外部域。

【讨论】:

    【解决方案2】:

    如果这是您的 HTML:

    <iframe src="http://www.google.com" width="100%" height="300" id='iframe'>
      <p>Your browser does not support iframes.</p>
    </iframe>
    

    难道就这么简单吗:

    var iframeEl = document.getElementById('iframe')
    var src = iframeEl.src;
    

    然后用它与您的域进行比较?

    【讨论】:

    • src总是返回初始值,但是iframe页面肯定会因为跟随链接/在iframe内提交表单而改变
    • 应该仍然足以知道它是否在同一个域上,除非您通过跟踪 iframe 内的某个链接以某种方式最终进入自己的域,否则初始值应该可以,不是吗?有可能吗?
    【解决方案3】:

    为什么不检查 iframe 中的 href 属性是否与您的域相同?

    parent.frames[1].location.href;
    

    【讨论】:

    • 这将导致安全错误。您甚至无法检查是否存在“href”或“origin”键或位置对象中的其他任何内容:(
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多