火狐浏览器
方法1,
网站A:文件srcPage.php 代码
<?php 
if(isset($_GET['a'])){
$a=$_GET['a'];
}if(isset($_GET['b'])){
$b=$_GET['b'];

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body>
<h1>
<?php 
echo 'this is test'.$a.$b;
?>
</h1>
</body>
</html>
网站B:文件iPage.html 
<iframe id="iId" name="iName" src="http://www.A网站.com/srcPage.php?a=1&b=2" scrolling="no" frameborder="0"></iframe> <script type="text/javascript">
window.onload = (function () { 
alert(document.frames["iName"].document.getElementsByTagName('h1')[0].firstChild.data);
});</script>
返回值也是对的,但我要用JS获取返回值,并处理,好像不能获取;
方法2:
网站A:文件srcPage.php 代码
<?php 
if(isset($_GET['a'])){
$a=$_GET['a'];
}if(isset($_GET['b'])){
$b=$_GET['b'];

?>
echo "({modify:".json_encode($a.$b)."})";exit;   
网站B:文件iPage.html <script type="text/javascript">
$.getJSON("http://www.A网站.com/srcPage.php?a=1&b=2", 
function(data){  
alert("Data load:"+data.modify);
}  
);  
</script>用firebug看,无响应,jquery中出错了

解决方案 »

  1.   

    document.location.search  可以获取GET方式的值所以 《<?php 
        echo 'this is test'.$a.$b;
    ?>
    》可以用
    <script>
    alert(document.location.search);
    </script>
    来代替,就能达到你的要求了。
      

  2.   

    我是要在网站B获取,不过我现在用方法2做了,url里少写了callback=?
    已经可以了,不过session有问题啊,session能跨域吗?
      

  3.   

    用jquery-1.2.6.js
    srcPage.php里面封装的是json数据$(function() {
    $.getScript('http://www.A网站.com/srcPage.php?a=1&b=2', function() {
      if (obj) {
          obj是srcPage.php里面json数据的对象名。
      }
    }
    }
      

  4.   

    cookie与javascript配合能跨域session不能跨域
      

  5.   


    两个网站是同主域名吗?关于javascript跨域,参考:Javascript跨域访问解决方案
    由于安全方面的考虑, Javascript 被限制了跨域访问的能力,但是有时候我们希望能够做一些合理的跨域访问的事情,那么怎么办呢? 这里分两类情况:
             一、基于同一父域的子域之间页面的访问 
                     参见如下 3 个 domain 域:1 、 taobao.com
              2 、 jipiao.taobao.com
              3 、 promotion.taobao.com它们有相同的父域   taobao.com
             二、基于不同父域页面之间的访问 
                     参见如下 3 个 domain 域:1 、 taobao.com
                 2 、 baidu.com3 、 sina.com.cn     它们具有不同的父域。 解决它们之间跨域的方案:<!--[if !supportLists]-->① <!--[endif]-->服务器 Proxy:   域 A 的页面 JS 需要访问域 B 下的链接获取数据,该方案在域 A 的服务器端建立一个 Proxy 程序 ( 可能是 ASP 、 servlet 等任何服务端程序 ) ,域 A 的页面 JS 直接调用本域下的 Proxy 程序, proxy 程序负责将请求发送给域 B 下的链接并获取到数据,最后再通过 Proxy 将数据返回给页面 JS 使用。经过的访问流程就是: 域 A 下 JS-- à 域 A 下 Proxy--- à 域 B 下的链接 例子:第一步:   域 A:  http://Jipiao.taobao.com/test.htm     页面上 javascript 脚本 view plaincopy to clipboardprint?
       <mce:script type=”text/javascript”><!--  
       
      
        Var sUrl=” http://Jipiao.taobao.com/proxy.do ”; // 本域下代理地址   
      
    var callback =  
    {  
       success: function(res) {   alert(res.responseText);   },   
       failure: function(res) {  alert(‘failure’);},   
       argument:{}   
    }   
      
      YAHOO.util.Connect.asyncRequest(’GET’, sUrl, callback, null);     
      
        
    // --></mce:script>    第二步:Proxy 程序 ( 这里假定是一个 servlet) :   
    view plaincopy to clipboardprint?
    Public class Proxy extends …….{   
      
    ..doGet(……..){   
      
    HttpClient  client=……;   
      
    GetMethod get= new   GetMethod(" www.baidu.com/xxxxx.do ") ;// 访问域 B 的链接   
      
    int statusCode = client.executeMethod( get );   
      
    if (statusCode != HttpStatus.SC_OK) {   
      
       
        
       
    byte[] responseBody = get.getResponseBody();  
      
    String res=new String(responseBody);  
      
    Httpresponse.getWriter().write(res);//  
    将数据返回给域  
    A  
      
      
        }   
      
    }   
      
    }   
      <!--[if !supportLists]-->② <!--[endif]-->  Script 标签 : 域 A 页面 http://Jipiao.taobao.com/test.htm 的 head 中写一个空的 Script 标签view plaincopy to clipboardprint?
    <html>   
      
      <head>   
      
      <mce:script id=”remoteScript” type=”text/javascript” src="””" mce_src="””" /><!--  
       
      
      <head>   
      
      <body>   
      
    <script type=”text/javascript” >   
      
      Var remoteScript=document.getElementById(‘remoteScript’);   
      
      remoteScript.src=” www.baidu.com/xxxxx.do”;// 域 B 的链接   
      
      alert(remote.test);// 使用域 B 返回的 JSON 数据   
      
      alert(f[0]);   
    // --></mce:script>   
      
      </body>   
      
    </html>    注意:这种方案要求域 B 返回的数据必须是合法的 JSON 格式或者如 JS 文件的格式。 域 B 返回的数据格式如下:view plaincopy to clipboardprint?
    Var remote={test:’hello’};   
      
    Var f=[‘2,1];   
      
    {“test”:"hello","arrays":[2,1]}  
      对于基于同一父域的子域之间页面的访问这一类情况,还有第三种方式: 
        ③ 隐藏 iframe: 即域 A jipiao.taobao.com/yyyy.htm 的页面上写一个隐藏的 iframe ,view plaincopy to clipboardprint?
    <html>   
      
      <head>   
      
    <head>   
      
      <body>   
      
    <mce:script type=”text/javascript” ><!--  
       
      
      Document.domain=”taobao.com”;   
      
      Var remoteHtml=document.getElementById(“remoteHtml”);   
      
    remoteHtml.src=”promotion.taobao.com/xxxx.htm”;// 这里访问域 B 的链接   
      
    var document=remoteHtml.ContentDocument;   
      
      …// 这里就可以使用 document 来操作域 B 中页面 xxx.htm 的数据了   
    // --></mce:script>   
      
    <iframe id=”remoteHtml” src="””" mce_src="””"   style="”diapay:none”/" mce_style="”diapay:none”/">   
      
      </body>   
      
    </html>   
      这里 promotion.taobao.com/xxxx.htm 页面也需要设置 document.domain="taobao.com" , 这种方法才能奏效。之所以这种 iframe 的方法不适合不同父域之间的跨域,是因为设置 document.domain 只能设置为自己的父域,而不是能设置为其他域,例如 :jiapiao.taobao.com 只能设置 document.domain=”taobao.com” ,而不是是 document.domain=”baidu.com” 优缺点比较:  这里列举的三种方案各有优缺点:  Proxy 方案优点是可以适用用于几乎所有的跨域访问,而且只需要要一个域中进行开发,另一个域可以提供任何类型格式的数据。缺点是这种方案经过了中间 Proxy ,所以延迟可能稍微大一点,并且会加重本域服务器的负荷,开发工作量也稍微大一点。   Script 标签的方案可以说是非常简单的,不用几行代码就搞定了事,不过它对返回的数据格式要求有点严格,只能是 Json 格式数据 , 如果是其他格式的数据,那么这种方法就无能为力了。 隐藏 iframe 方式也很简单,它可以处理任何返回的数据格式,但它只适用在具有同一个父域下的跨域请求上,并且要求其他域得配合开发,即需要设置 document.domain 推荐阅读文章:http://www.cnblogs.com/passer/archive/2008/07/16/1243811.html ================补充:Script标签标签方法最好要求服务端返回的json需要有句柄,即 如 json={...} 什么的。因为客户端需要使用这个句柄来引用。如果没有,客户端JS只有采用 var json=eval(jsonStr)方式来执行,效率不是很高。还有一种形式就是客户端传入要回调的方法。例如 xxxx.do?callbackApi=ca服务端接收到callbackApi参数后,将json包装在ca中,如:ca({.....});客户端定义回调函数就可以访问了。   function ca(json){         .......   }不论如何,这种方法对于服务端都有一定耦合。
      

  6.   

    ajax跨域和JS的跨域通信(Cross The Site)的几种解决方案
        最近做的一个项目中需要ajax跨域取得数据,如果是在本域中确实没有问题,但是放到二级域和其他域下浏览器直接就弹出提示框:“该页正在访问其控制范围之外的数据,这有些危险,是否继续"
    1.什么引起了ajax跨域不能的问题
    ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。2.有什么完美的解决方案么?
    没有。解决方案有不少,但是只能是根据自己的实际情况来选择。具体情况有:
    一、本域和子域的相互访问: www.aa.com和book.aa.com
    二、本域和其他域的相互访问: www.aa.com和www.bb.com 用 iframe
    三、本域和其他域的相互访问: www.aa.com和www.bb.com 用 XMLHttpRequest访问代理
    四、本域和其他域的相互访问: www.aa.com和www.bb.com 用 JS创建动态脚本 
    解决方法:
    一、如果想做到数据的交互,那么www.aa.com和book.aa.com必须由你来开发才可以。可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。(这个办法我没有尝试,不过理论可行)
    二、当两个域不同时,如果想相互调用,那么同样需要两个域都是由你来开发才可以。用iframe可以实现数据的互相调用。解决方案就是用window.location对象的hash属性。hash属性就是http://domian/web/a.htm#dshakjdhsjka 里面的#dshakjdhsjka。利用JS改变hash值网页不会刷新,可以这样实现通过JS访问hash值来做到通信。不过除了IE之外其他大部分浏览器只要改变hash就会记录历史,你在前进和后退时就需要处理,非常麻烦。不过再做简单的处理时还是可以用的,具体的代码我再下面有下载。大体的过程是页面a和页面b在不同域下,b通过iframe添加到a里,a通过JS修改iframe的hash值,b里面做一个监听(因为JS只能修改hash,数据是否改变只能由b自己来判断),检测到b的hash值被修改了,得到修改的值,经过处理返回a需要的值,再来修改a的hash值(这个地方要注意,如果a 本身是那种查询页面的话比如http://domian/web/a.aspx?id=3,在b中直接parent.window.location是无法取得数据的,同样报没有权限的错误,需要a把这个传过来,所以也比较麻烦),同样a里面也要做监听,如果hash变化的话就取得返回的数据,再做相应的处理。
    三、这种情形是最经常遇到的,也是用的最多的了。就是www.aa.com和www.bb.com你只能修改一个,也就是另外一个是别人的,人家告诉你你要取得数据就访问某某连接参数是什么样子的,最后返回数据是什么格式的。而你需要做的就是在你的域下新建一个网页,让服务器去别人的网站上取得数据,再返回给你。domain1下的a向同域下的GetData.aspx请求数据,GetData.aspx向domain2下的 ResponseData.aspx发送请求,ResponseData.aspx返回数据给GetData.aspx, GetData.aspx再返回给a,这样就完成了一次数据请求。GetData.aspx在其中充当了代理的作用。具体可以看下我的代码。
    四、这个和上个的区别就是请求是使用<script>标签来请求的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的a 内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面b,b返回数据即可,可以直接返回JS的代码。因为script的src属性是可以跨域的。具体看代码,这个也比较简单。code:
    http://www.live-share.com/files/300697/Cross_The_Site_Test_code.rar.html
    (csdn不能粘贴附件么?)总结:
    第一种情况:域和子域的问题,可以完全解决交互。
    第二种情况:跨域,实现过程非常麻烦,需要两个域开发者都能控制,适用于简单交互。
    第三种情况:跨域,开发者只控制一个域即可,实现过程需要增加代理取得数据,是常用的方式。
    第四种情况:跨域,两个域开发者都需要控制,返回一段js代码。PS:代码自己按照情况修改即可。这是拿别人的参考链接,老美的文章比较多。1. Security Considerations: Dynamic HTML
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp 2. About Cross-Frame Scripting and Security
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp 3. Cross-Domain Proxy
    http://ajaxpatterns.org/Cross-Domain_Proxy 4. Cross Domain XMLHttpRequest using an IFrame Proxy
    http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75 5. Back Button Support for Atlas UpdatePanels
    http://www.nikhilk.net/BackButtonSupport.aspx 6. Cross-document messaging hack
    http://blog.monstuff.com/archives/000304.html 7. Building Mash-ups with "Atlas"
    http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx 8. Calling web services hosted outside of your application with “Atlas”
    http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip 9. AJAX Tip: Passing Messages Between iframes 
    http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15 10. OSCON Cross-site Ajax Slides
    http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt 11. OSCON 2006: Cross-site Ajax
    http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/