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

当我试图从 iframe 设置一个散列值到包含另一个域 URL 的父 url 时,我得到了下面的错误:

不安全的 JavaScript 试图从 URL 为“ URL2”的帧中访问 URL 为“ URL1”的帧。域、协议和端口必须匹配。

我怎样才能解决这个问题?

181493 次浏览

当两个框架具有不同的域-> 安全性时,跨框架脚本是不可能的。

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

现在回答你的问题: 没有解决方案或工作周围,你只需要检查你的网站设计为什么必须有两个框架从不同的域改变另一个的网址。

From a child document of different origin you are not allowed access to the top window's location.hash property, but you are allowed to set the location property itself.

这意味着给定的顶部窗口位置是 http://example.com/page/,而不是执行

parent.location.hash = "#foobar";

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

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

Since the resource is not navigated this will work as expected, only changing the hash part of the url.

如果您正在使用它进行跨域通信,那么我建议改用 EasyXDM

I was getting the same error message when I tried to change the domain for iframe.src.

对我来说,答案是将 iframe.src 更改为同一域上的 URL,但实际上是将 html 重定向到所需域的页面。然后,另一个域出现在我的 iframe 中,没有任何错误。

非常有效:)

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

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();
});

我发现使用 XFBML 版本的 Facebook like 按钮而不是 HTML5版本解决了这个问题。将下面的代码添加到您希望按钮出现的位置:

<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#"

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