使用jquery无法从其他域获取iframe的值?

时间:2012-11-01 01:44:57

标签: php jquery jsonp

我有一个例子:

域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结果未显示

4 个答案:

答案 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/