2011-06-18 38 views
3

在网站http://imaginaryman-test.blogspot.com/上,打字机位于IFAME内部。当您直接访问网站时,所有浏览器都能正常工作http://castedspell.com/mark/,但是当查看嵌入在IFRAME中的版本时,它不适用于IE并在Chrome中引发错误。

不安全的JavaScript尝试访问来自具有URL http://castedspell.com/mark/的帧的URL http://imaginaryman-test.blogspot.com/的帧。域,协议和端口必须匹配。IFRAME安全问题中的Java脚本

这是嵌入式IFRAME https://github.com/totheleftpanda/typeWrite/tree/master/mark

我理解的源代码,这是一个安全问题,但我不`吨知道如何解决它并不能找到,这将有助于我解决问题的任何材料。

+1

没有人回答为什么这不起作用的基本问题。 – Prospero

+0

在swf发生任何事情之前,我看到错误。你可以尝试评论swf嵌入,看看你是否仍然在Chrome中看到错误? –

回答

3

最简单的方法是设置一个PHP(或任何服务器语言)代理,只从其他域获取页面内容并将其输出。唯一的缺点是远程域客户端的cookies不会被发送。

+0

有没有服务器 – Prospero

+0

如果有一个域名,有一个服务器... – xavierm02

+0

如果你真的不能这样做,请尝试https://developer.mozilla.org/en/DOM/window.postMessage但只有在你控制这两个网站时才会有效。 – xavierm02

0

我以前有过类似的问题。基本上,如果您的iframe包含来自与主页的域不同的域的页面,则javascript将无法跨越它们之间的边界。 iframe中的Javascript将能够在iframe中进行通话,主页面中的javascript将能够在主页面内进行通话,但它们将无法相互通话。

这是一个旨在阻止跨站脚本攻击的安全问题。有很多黑客可以用来解决这个问题,但他们都是(或者至少我所知道的)相当多毛。

这里有一些问题,你应该设法进一步走之前回答:

1)究竟是你想使用JavaScript的网页之间做什么?
2)您是否有权访问这两个页面的源代码?

+0

1)我确实可以访问这两个页面的来源。 2)我没有试图访问我不相信的页面之间的任何内容。我试图从同一个IFRAME中的IFRAME调用一个外部的Flash函数。难道是Flash播放器将JS功能导出到外部窗口? – Prospero

+1

嗯。我不认为Flash播放器会试图将JS函数导出到外部窗口。它可能会做的唯一的事情就是将JavaScript注入到iframe中,然后尝试访问parent.somethingOrOther。如果你说你正在调用外部闪光灯功能,那么你用什么来调用外部功能? JavaScript的? – MoarCodePlz

+0

是的我正在使用闪光灯外部接口库将playSound()函数从闪存导出到JS https://github.com/totheleftpanda/Brujita/blob/master/www/mark/SoundPlayer/SoundPlayer.as – Prospero

1

你唯一的机会就像easyXDM。 (或做手工使用散列,但我们更希望easyXDM)

见SO回答:Cross-domain hash change communication

如。如果你想调用一个方法:
http://easyxdm.net/wp/2010/03/17/remote-procedure-calls-rpc/

编辑:

如果我尝试在Firefox中的演示中,我不明白“不安全JavaScript尝试访问”错误的。但是在Chrome中它会抛出很多次。
你的例子中有太多的其他代码,我甚至不知道你的代码导致了这个问题。你应该做一个非常有限的/基本的测试,看看你的Flash通信是否有效,没有所有其他的JavaScript。

+0

什么是跨域调用?我所调用的Flash应用程序位于Iframe内。 – Prospero

+1

您正在使用javascript调用另一个域上的iframe中的方法...因此它跨域 – roberkules

+0

即使JS位于I框架中。这没有任何意义,它只会抛出与嵌套在Iframe中的Flash接口有关的错误。 – Prospero

0

它可能比上述答案简单。它看起来像这样的功能:

function playSound(){ 
    swf.playSound(); 
} 

写在DOM时间表之前SWF实际分配给它下面的功能SwfObject的。

我建议将该功能进一步降低,然后重新测试。

+0

定义一个函数不会调用它。 –

+0

这已经在代码中,我不是在建议编写一个新的函数。我在说的是,函数“playSound”是在swf附有方法之前定义的,ergo,swf.playSound()将是一个未定义的方法,根据IE的DOM – jerebear