【问题标题】:Javascript call function from an external domain iframe来自外部域 iframe 的 Javascript 调用函数
【发布时间】:2011-08-21 06:16:00
【问题描述】:

页面 A 和页面 B 位于不同的域中。

A 在页面 B 上进行 iframe。

我需要从页面 A 调用页面 B 上的函数。

如果没有 porthole 之类的东西,这可能吗?

基本上我要做的是一个简单的推送通知(A通知B),不需要传输任何内容。

【问题讨论】:

  • 你对这两个域都有控制权吗?
  • 好吧。我完全控制了 A,我可以说服 B 的所有者在他的页面上放置一个函数/脚本。
  • 好吧,你也许可以使用这个:window.postMessage。 (注意:这是一个相当新的 API)
  • 不支持哪些浏览器?
  • 主要是 IE7 及以下。它适用于 FF3+、IE8+、Chrome、Safari 5、Opera 10+(请参阅this question

标签: javascript cross-domain


【解决方案1】:

cross window messaging 有一种 HTML5 方法可以做到这一点。

当 HTML5 不可用时有 various work-arounds,即使在不同的来源之间也可以使用。

【讨论】:

    【解决方案2】:

    如果您想避免使用该特定库,您可以使用它所基于的概念并自行开发。这是一篇非常深入的文章,描述了不使用库的技术:http://softwareas.com/cross-domain-communication-with-iframes

    【讨论】:

      【解决方案3】:

      将A和B放在同一个域中,不同的子域就可以了。然后在iframe A中,可以调用parent.function_name(parameter1,parameter 2)。如果您需要经常调用该函数,您可能需要这样做:

      function p(data, div_id){parent.p(data, div_id);}  
      

      然后在 iframe A 中,你可以只调用 p(data, div_id),它实际上会调用页面 B 的函数。我已经使用了很多彗星流媒体。有兴趣的可以看一下这篇,基本上都是用iframe来和数据通信的:

      http://www.shanison.com/2010/05/10/stop-the-browser-“throbber-of-doom”-while-loading-comet-forever-iframe/

      【讨论】:

      • 子域解决方案不是一个选项。
      • 有什么理由不只做“var p = parent.p;”吗?
      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2013-01-12
      相关资源
      最近更新 更多