当我尝试从包含另一个域网址的iframe将哈希值设置为父网址时,我收到以下错误:
不安全的JavaScript尝试从URL“URL2”的框架访问URL“URL1”的框架。域,协议和端口必须匹配。
如何解决此问题?
答案 0 :(得分:123)
从不同来源的子文档中,您不能访问顶部窗口的location.hash
属性,但您可以自行设置location
属性。
这意味着假设顶部窗口位置为http://example.com/page/
,而不是
parent.location.hash = "#foobar";
您确实需要知道父母的位置并且
parent.location = "http://example.com/page/#foobar";
由于资源未导航,因此可以按预期工作,只更改网址的哈希部分。
如果您使用此功能进行跨域通信,我建议您改用easyXDM。
答案 1 :(得分:13)
当两个帧具有不同的域时,不可能使用Crossframe-Scripting - >安全
请参阅:http://javascript.about.com/od/reference/a/frame3.htm
现在回答你的问题:没有解决方案或解决方法,你应该检查你的网站设计为什么必须有来自不同域的两个框架来改变另一个框架的网址。
答案 2 :(得分:9)
当我尝试为iframe.src缓存域时,我收到了相同的错误消息。
对我来说,答案是将iframe.src更改为SAME域上的url,但实际上是一个到所需域的html重定向页面。然后另一个域出现在我的iframe中,没有任何错误。
像魅力一样工作。 :)
答案 3 :(得分:6)
解决方案可能是使用检索远程内容的本地文件
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();
});
答案 4 :(得分:3)
我发现使用XFBML版本的Facebook喜欢按钮代替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#"
答案 5 :(得分:1)
即使您创建代理或加载内容并将其注入本地内容,问题仍然存在,该内容定义的任何脚本都将从其他域加载并导致跨域问题。