CQ-CSER

计算机爱好者

一级域名和二级域名跨域的解决方案

Posted on | 一月 31, 2010 | No Comments

1,对于域名a.a.com和域名http://www.a.com/的两个页面

  如果要在a.a.com使用AJAX访问http://www.a.com/的时候js 会提示”没有权限”

这样的错误很明显,跨域了,在js当中跨域,怎么解决呢?

  发现在页面用Script来引用http://www.google.com/js/js.js 时却不会报错,所以就想了个转化的办法

 也是在网上查到的,人家称之为AJAJ技术,其实也是AJAX的一部分吧

 既然我要用script标签来引用外部js,那么肯定得有个<script>申明吧

 <head>

<script src=” language=’”javascript” id=”get”></script>

</head>

好了,现在就可以在js中动态链接外部js了、

button.click=function(){

var doc=document.getElementById(“get”);

doc.src=’http://www.google.com/js/js.js’;

//如果’http://www.google.com/js/js.js’的内容是

—————————————-

var p=’你色吗’;

—————————————-

那么我就可以这样写了

//这里注意点,不是IF

(doc.readStatus==200)

      alert(p);

整个源码示例:

 1 <HTML> 
 2 <HEAD> 
 3 <TITLE> New Document </TITLE> 
 4 <META NAME=”Generator” CONTENT=”EditPlus”> 
 5 <META NAME=”Author” CONTENT=”"> 
 6 <META NAME=”Keywords” CONTENT=”"> 
 7 <META NAME=”Description” CONTENT=”"> 
 8 </HEAD> 
 9 <SCRIPT LANGUAGE=”JavaScript” src=”" id=”get”> 
10 </SCRIPT> 
11 <SCRIPT LANGUAGE=”JavaScript”> 
12 
13 function get(url) 
14 
15 var obj = document.getElementById(get); 
16 obj.src = url; 
17 (obj.readStatus == 200
18 
19 alert(xml); 
20 
21 
22 function text() 
23 
24 get(get.php); 
25 
26 
27 </SCRIPT> 
28 <BODY> 
29 <INPUT TYPE=”button” value=”CLICK ME” onclick=”text()”> 
30 </BODY> 
31 </HTML>

get.php的代码就是

<? echo ‘你色吗?’ ?>

 

点击按钮,输出 “你色吗?”

就这么简单,看起来比那个Ajax的简单吧

这个是Ajax执行权限的跨域,另一个,cookie的跨域,这个很简单了

2,cookie的跨域

var main=”.main.com”; //记着一定要加个“.”

function setCookie(name,value,day)
{
    var now=new Date();var ms;
    if(day>0){
    now.setTime(now.getTime()+(day*24*3600*1000));
    }
    document.cookie=name+”=”+escape(value)+”;expires=”+now.toGMTString()+”;path=/;domain=”+main;
}

附上php跨域示例

     dotnet跨域示例 

3,Forms验证下的一级域名和二级域名的登录同步

 简要的说下

 <authentication mode=”Forms” >
     <forms defaultUrl=”default.aspx” loginUrl=”login.aspx” name=”_aq”   timeout=”60″ domain=”.xs.com” ></forms>
  </authentication>

 注意的几项 name domain 这两个选项在父子域名中必须相同

 另外登录代码

                    FormsAuthenticationTicket tic = new FormsAuthenticationTicket(uname, true, gettimeByvalue(time));
                    string entic = FormsAuthentication.Encrypt(tic);
                    HttpCookie h = new HttpCookie(FormsAuthentication.FormsCookieName, entic);
                    h.Expires = d;
                    h.Domain = FormsAuthentication.CookieDomain;
                    h.HttpOnly = true;
                    HttpContext.Current.Response.Cookies.Add(h);

 注意加红部分

注销部分

       Context.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        FormsAuthentication.SignOut();
        Response.Redirect(“/”);

 4,JSONP方式

   这里补上浪子兄的建议,使用JSONP突破跨域瓶颈

  理论上就是我上面说的方法,只是一些js框架都封装起来了

  就已jquery来做示例

 ajax方法:

$.ajax({
             url:”show.aspx”,
             dataType:”jsonp”,
             jsonp:”jsoncallback”,/*默认值:callback*/
             success:function(data){
                 alert(data.mes);
             }
        });
show.aspx页面:

Response.ContentType = application/x-javascript;    
 
string cb = Request.Params["jsoncallback"];
 Response.Write(cb 
+ ({mes:\”kofaslfj\}));
 Response.End();

getJSON方法:

$.getJSON(show.aspx&callback=?,function (d){
         alert(d.mes);
        }
        );

这个show.aspx与上面差不多一样,把jsoncallback换成callback就行了

相关文章:

  1. 禁止右键代码
  2. AJAX在静态HTML页面中实现权限控制的应用
  3. 判断脚本是否加载完成的方法
  4. Ajax文本框输入提示
  5. JavaScript 读写文件

评论|Comments

留言|Leave a Reply





  • Archives

  • SUNSHINE

  • About

    本博客采用创作共用版权协议,要求署名、非商业用途和保持一致. 转载本博客内容也遵循“署名-非商业用途-保持一致”的创作共用协议.

    订阅

    Search

    Admin