不安全的JavaScript尝试使用URL访问框架

当我尝试从包含另一个域url的iframe中设置一个散列值给父url时,出现以下错误:

不安全的JavaScript尝试从URL“URL2”的帧中访问具有URL“URL1”的帧。 域,协议和端口必须匹配。

我该如何解决这个问题?

从不同来源的子文档中,您不允许访问顶层窗口的location.hash属性,但是您可以设置location属性本身。

这意味着,鉴于顶部窗口的位置是http://example.com/page/ ,而不是做

 parent.location.hash = "#foobar"; 

你确实需要知道父母的位置和做的

 parent.location = "http://example.com/page/#foobar"; 

由于资源没有导航,这将按预期工作,只改变url的散列部分。

如果你使用这个进行跨域通信,那么我build议使用easyXDM 。

当两个框架具有不同的域 – >安全性时,不能跨帧 – 脚本编写。

看到这个: http : //javascript.about.com/od/reference/a/frame3.htm

现在回答你的问题:没有解决方法或解决方法,你应该检查你的网站devise为什么必须有来自不同域的两个框架来改变另一个的URL。

当我尝试对iframe.src的域进行chamge时,我收到了相同的错误消息。

对我来说,答案是将iframe.src更改为同一个域上的一个url,但是实际上这是一个htmlredirect页面到所需的域。 其他域然后出现在我的iframe没有任何错误。

像魅力一样工作。 🙂

解决scheme可以是使用本地文件来检索远程内容

remoteInclude.php

 <?php $url = $_GET['url']; $contents = file_get_contents($url); echo $contents; 

HTML

 <iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe> <script> $("#frametest").load(function (){ var contents =$("#frametest").contents(); }); 

我发现使用Facebook的XFBML版本像button而不是HTML5版本修复了这个问题。 将下面的代码添加到要显示button的位置:

 <div id="fb-root"></div> <script>(function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like> 

然后添加到您的HTML标记:

  xmlns:fb="http://ogp.me/ns/fb#" 

问题在于,即使您创build代理或加载内容并将其注入为本地,但内容定义的任何脚本都将从其他域加载并导致跨域问题。