我有一个例子:
域1中的:www.domain1.com/demo.php
<div id="result">Hello</div>
域2中的:www.domain2.com/demo.php
jQuery(document).ready(function($) {
$('.click').click(function(){
var value = $("a").attr("href");
var dataString = 'var='+value;
var url = 'http://www.domain1.com/test.php?'+dataString;
$.getJSON(url + "&jsoncallback=?", function(data){
$("#result").html(data);
})
return false;
});
});
<iframe src="http://www.domain1.com/demo.php" frameborder="0" border="0" scrolling="no"></iframe>
<a href="play" class="click">Click on this</a>
最后www.domain1.com/test.php
我调用了json回调:
<?php
if($_GET['var']) {
$value = $_GET['var'];
echo $_GET["jsoncallback"] . '(' . json_encode($value) . ');';
}
?>
=&GT;我无法从域1到域2获得价值?
经过测试,我运行www.domain2.com/demo.php
结果未显示
答案 0 :(得分:3)
原因是浏览器会出于安全原因阻止请求。这可能允许站点使用您当前的登录在后台加载另一个站点,然后窃取私人信息。
例如,我登录到我的银行帐户并查看我的信用卡,然后我在另一个标签中访问“imavirus.com”,并将隐藏的iframe加载到我的银行。当我登录银行网站时,它将加载登录,并显示我的信用卡信息。 (这可能是一个不好的例子,因为银行通常有更好的安全性,但你明白了)
在Chrome中试用它,您会在“Inspect Element”窗口中看到一个小红色错误。 (其他浏览器可能有类似的)
答案 1 :(得分:0)
这是您面临的跨域问题。为什么不花一点时间看看this tutorial?
另外,如果您搜索SO,那么a good post也可供您参考。
答案 2 :(得分:0)
如果您可以访问您从iFrame访问的域名代码,则可以尝试添加此标题:
// In PHP, before any output is sent...
header( "Access-Control-Allow-Origin: http://www.domain2.com" );
这将允许您的AJAX请求返回结果。
答案 3 :(得分:0)
出于安全原因,您无法直接访问跨域iframe。
但是有一些解决方案。
看看这个很好的例子: http://onlineaspect.com/uploads/postmessage/parent.html 在这篇文章中: http://onlineaspect.com/2010/01/15/backwards-compatible-postmessage/