【问题标题】:How to detect when iframe scripts are executed?如何检测 iframe 脚本何时执行?
【发布时间】:2012-08-24 09:07:00
【问题描述】:

例如: 我有一个带有 iframe 的主页,我的 iframe 包含一个按钮。当我按下 iframe 内的按钮时,会执行一些脚本,并更改​​ iframe 的设计。出现文本和其他内容。

如何检测 iframe 脚本何时运行? (或者按钮被按下了?)

iframe 来自不同的域。

【问题讨论】:

  • 您对其他域有任何控制权...您可以更新其中的任何内容吗?如果不是,那么@PhonicUK 是正确的,您将点击same origin policy restrictions。如果你这样做了,那么例如可以允许使用 CORS 进行访问...有关更多详细信息,请参阅 this answer
  • 我在 iframe 代码中没有任何控制...我在想是否可以检测到它何时被点击...这可能吗?
  • 不,如果您无法控制 iFrame 的来源,那么您完全不走运......您无法访问 iframe 中的 任何内容(DOM、代码, 事件等)并出于良好的安全原因

标签: javascript jquery html iframe


【解决方案1】:

如果 iframe 的内容来自与外部页面不同的域,那么您就不能 - 浏览器故意阻止您了解 iframe 内部发生的事情。不过,您可以做的是抓取框架所指向的 URL(如果它发生变化)。

如果它在同一个域中运行,您可以访问 iframe 中的元素,就像通常通过 iframe 的 document 属性访问一样

【讨论】:

  • 那你不能。浏览器不会让您这样做,因为这会带来安全风险。
【解决方案2】:

如果主页面和iframe在同一个域,可以让iframe中的javascript调用函数或者访问父frame的元素。

所以在 iframe 中的脚本结束时你可以这样做

parent.script_is_finished();

【讨论】:

    【解决方案3】:

    如果您可以控制 iframe 中的脚本,则可以使用 window.postMessage 与您的主页通信,即使它们位于不同的域中。

    支持 is limited 到 FF3+、IE8+、Chrome、Safari(5?)、Opera10+

    这是一个demo on html5demos

    【讨论】:

    • 啊,那就没用了,抱歉 :)
    【解决方案4】:

    作为对iframe 来自不同域这一事实的更新:

    简答:不。您无法检测到来自另一个域的iframe 内的点击。

    更长但仍然简短的答案:您不能这样做的原因与您可以更改iframe 的内容的原因相同——这将是一个安全风险除非 iframe 在同一个域中。您根本无法在来自不同域的 iframe 中跟踪用户活动。

    抱歉,希望对您有所帮助!

    【讨论】:

    • @Pytagora 如果您告诉我们您在大局中想要实现的目标,我们可能会提供更多帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2016-04-08
    • 2011-07-20
    • 2012-07-20
    • 2011-06-14
    • 2015-08-30
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多