-1

我有一个例子:

在域 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) . ');';
}
?>

=> 我无法从域 1 到域 2 获得价值?

测试后,我运行www.domain2.com/demo.php的是结果不显示

4

4 回答 4

3

这样做的原因是浏览器出于安全原因会阻止请求。这可能允许网站使用您当前的登录名在后台加载另一个网站,然后窃取私人信息。

例如,我登录我的银行帐户并查看我的信用卡,然后我在另一个选项卡中访问“imavirus.com”,它会将隐藏的 iframe 加载到我的银行。当我登录银行网站时,它会加载登录并显示我的信用卡信息。(这可能是一个不好的例子,因为银行通常有更好的安全性,但你明白了)

在 Chrome 中尝试一下,您会看到“检查元素”窗口中弹出一个红色的小错误。(其他浏览器可能也有类似的)

于 2012-11-01T01:47:59.257 回答
0

如果您可以访问从 iFrame 访问的域上的代码,则可以尝试添加此标头:

// In PHP, before any output is sent...
header( "Access-Control-Allow-Origin: http://www.domain2.com" );

这将允许您的 AJAX 请求返回结果。

于 2012-11-01T02:11:30.290 回答
0

出于安全原因,您不能直接访问跨域 iframe。

但是有一些解决方案。

看看这个很好的例子: http: //onlineaspect.com/uploads/postmessage/parent.html 在这篇文章中:http: //onlineaspect.com/2010/01/15/backwards-compatible-postmessage/

于 2012-11-01T05:09:22.783 回答
0

那是您面临的跨域问题。为什么不花点时间看看这个教程呢?

此外,如果您在 SO 上搜索,也有一篇很好的帖子供您参考。

于 2012-11-01T01:49:45.287 回答