【问题标题】:Using "window" and "document" in an iFrame在 iFrame 中使用“窗口”和“文档”
【发布时间】:2010-07-29 21:47:49
【问题描述】:

我正在开发一个 iFrame Facebook 应用程序。 iFrame 有一个瑞士法郎。我们需要通过 javascript 访问该 swf。

这个 iFrame 有一个 swf,需要放入 Javascript 变量中,以便我们可以从中调用 ExternalInterface 函数。

现在,我们的“flash”变量未定义,因为我们似乎无法访问该 iFrame 的元素,因为这会引发沙箱安全警告,因为以这种方式调用窗口或文档意味着我们正在从父母的网站,即 Facebook。

现在,我们正在做类似的事情:

if(navigator.appName.indexOf("Microsoft") != -1)
{
     flash =  window["swfr"];
 }
 else
 {
    flash = document["swfr"];
  }

我确信有办法使这项工作发挥作用,但不幸的是,我只是没有看到它。感谢您的帮助。

【问题讨论】:

    标签: javascript facebook iframe


    【解决方案1】:

    【讨论】:

    • 独立运行应用程序 - 一切正常。仅在源位于 iFrame 中时,一切都会中断,尽管我会尝试 Christian 的建议。
    【解决方案2】:

    子 iframe 页面具有对父级的引用,而不是相反。因此,您应该能够提供反向引用,然后使用它来操作您的 Flash 对象。此博客展示了如何调用父函数(您将 flash obj 作为引用传递):http://www.velocityreviews.com/forums/t164727-a-challenge-call-parent-javascript-function-from-inside-an-iframe.html

    父页面:

    function ManipulateFlashObj(obj)
    {
    alert(obj);
    }
    

    子(iframe 页面):

    parent.ManipulateFlashObj(document.getElementById("swf"));
    

    【讨论】:

    • 所以我不能从 iFrame 本身操作 iFrame 的元素,我必须使用对父级的引用来做到这一点?
    【解决方案3】:

    如果父页面和 iframe 页面位于不同的 DNS 域中,浏览器将不允许父页面查看子上下文,也不允许子页面查看父上下文。要在父子节点之间移动数据,您需要使用跨域脚本技术 (XSS),例如在 iframe URL 上传递数据。

    【讨论】:

      【解决方案4】:

      如果脚本在 IFrame 内,它应该可以工作,因为 IFrame 将与 SWF 文件具有相同的域。但是,如果 iframe 是从某个 facebook URL 提供的,则您必须在提供 SWF 的主机上创建/更新 cross-domain.xml 文件。

      另外,试试 swfObject,因为它具有更广泛的浏览器兼容性,甚至被 Flash Builder 4 在自动生成的 html 模板中使用。

      http://code.google.com/p/swfobject/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-23
        相关资源
        最近更新 更多