在iFrame中使用“window”和“document”

时间:2010-07-29 21:47:49

标签: javascript facebook iframe

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

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

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

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

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

我确信有办法让这项工作成功,但不幸的是,我只是没有看到它。我感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

子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"));

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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