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);
整个源码示例:
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跨域示例
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方法:
url:"show.aspx",
dataType:"jsonp",
jsonp:"jsoncallback",/*默认值:callback*/
success:function(data){
alert(data.mes);
}
});
show.aspx页面:
string cb = Request.Params[ " jsoncallback " ];
Response.Write(cb + " ({mes:\"kofaslfj\ " }) " );
Response.End();
getJSON方法:
alert(d.mes);
}
);
这个show.aspx与上面差不多一样,把jsoncallback换成callback就行了
另外不知有人有不同域名跨域的解决方案,希望能够一起讨论...