【问题标题】:Access variables in a iFrame, or Vice Versa访问 iFrame 中的变量,反之亦然
【发布时间】:2009-06-18 19:00:47
【问题描述】:

我有一个带有 iFrame 的 html 页面,我想从中读取一些变量。 它基本上是一张地图,我想从中检索纬度和经度值。

我一直在使用 Adob​​e AIR,并尝试从 innerHTML、contentWindow 检索值,但仍然无法正常工作。

有什么好的方法来完成这项工作吗?

【问题讨论】:

  • iframe 中的页面和主页面是否在同一个域中?

标签: html iframe variables air adobe


【解决方案1】:

浏览器安全模型禁止任何跨域流量/通信。如果我们处理不同的子域,规则可以放宽到顶级域。但最终,你没有追索权。

如果您的应用程序需要跨域通信,那么通过后端通常是您的最佳选择。如果您不控制 iframe 中的内容,您通常会很不走运。仅供参考,谷歌地图确实提供了一个 API 来使用他们的应用程序。 http://code.google.com/apis/maps/index.html

【讨论】:

    【解决方案2】:

    您可以使用 jQuery 访问 iframe 中的内容。

    <iframe id="iframeId" ...> .... <div id='someData'>data</div> ....</iframe>
    $('#iframeId').contents().find('#somedata').html(); // returns data
    

    【讨论】:

      【解决方案3】:

      您必须使用应用程序到非应用程序沙箱桥接。这将允许您在两个区域(iframe 和一般)之间进行通信。看这里http://www.adobe.com/devnet/air/ajax/quickstart/sandbox_bridge.html

      【讨论】:

        【解决方案4】:

        谢谢大家的回复,

        @svend :究竟什么是“通过后端”?我明白了.. 我确实控制 iFrame 中的内容,它位于另一个域中。

        @Webber:谢谢你的链接韦伯...看起来它对我有用..我会尝试一下...

        【讨论】:

        • 我认为 svend 的意思是您应该通过提供容器页面的域代理 iframe 内容。
        【解决方案5】:

        应用程序到非应用程序沙箱桥在跨域通信的情况下工作..

        谢谢大家的回复。。

        【讨论】:

          【解决方案6】:

          我不得不这样做:

          1- 在包含 iframe 的文件中添加隐藏输入,只要用户更改它们,它们就会在其中保存 lng 和 lat。

          2- 在js上创建这个函数:

          function getFrameWindow(frameId) {
          
            var frame = document.getElementById(frameId);
            var result = null;
            if (frame.contentDocument) {
              // For NS6
              result = frame.contentDocument.window || frame.contentDocument.defaultView; 
            } else if (frame.contentWindow) {
              // For IE5.5 and IE6
              result = frame.contentWindow;
            } else if (frame.document) {
              // For IE5
              result = frame.document.window;
            }
            return result;
          }
          

          3- 使用了包含 iframe 的 javascript 中的这段代码:

          getFrameWindow("iframe").document.getElementById("lat").value
          

          【讨论】:

          • 您还可以添加变量而不是隐藏输入并像这样访问它们:getFrameWindow("iframe").document.variable_name
          猜你喜欢
          • 2017-01-08
          • 2012-11-09
          • 2015-01-12
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          • 2012-12-06
          • 1970-01-01
          相关资源
          最近更新 更多