域名分为:一级域名、二级域名、三级域名。例如:baidu.com(一级域名) 、www.baidu.com(二级域名)tieba.baidu.com(二级域名)、bbs.youa.baidu.com (三级域名)。javascript
简易记法:在域名中包含两个点的为二级域名,只包含一个点的为一级域名。html
跨域:因为JavaScript同源策略的限制,a.com下的js没法操做b.com或是c.a.com下的域名对象。详情以下表:java
URL | 说明 | 是否容许通讯 |
---|---|---|
http://www.a.com/a.js http://www.a.com/b.js |
同一域名下 | 容许 |
http://www.a.com/lab/a.js http://www.a.com/script/b.js |
同一域名下不一样文件夹 | 容许 |
http://www.a.com:8000/a.js http://www.a.com/b.js |
同一域名,不一样端口 | 不容许 |
http://www.a.com/a.js https://www.a.com/b.js |
同一域名,不一样协议 | 不容许 |
http://www.a.com/a.js http://70.32.92.74/b.js |
域名和域名对应ip | 不容许 |
http://www.a.com/a.js http://script.a.com/b.js |
主域相同,子域不一样 | 不容许 |
http://www.a.com/a.js http://a.com/b.js |
同一域名,不一样二级域名(同上) | 不容许(cookie这种状况下也不容许访问) |
http://www.cnblogs.com/a.js http://www.a.com/b.js |
不一样域名 | 不容许 |
注意两点:node
1. 若是是端口和协议不一样形成的跨域问题,“前台”是无能为力的;json
2. 在跨域问题上,域仅仅是经过“URL的首部”来识别,而不会去尝试判断两个域是否在同一个IP上。跨域
解决主域相同而子域不一样的状况,设置document.domain的方法来解决。具体的作法是:在http://www.a.com/a.html和http://script.a.com/b.html两个文件中分别加上document.domain="a.com",而后在a.html中建立一个iframe,去控制iframe的contentDocument,这样两个js文件之间就能够交互了。这种办法只能解决主域相同而二级域名不一样的状况,若是把document.domain设置为baidu.com,显然会报错,代码以下:浏览器
HTML5中最酷的新功能之一就是跨文档消息传输(Cross Document Messaging)。下一代浏览器都支持这个功能:Chrome2.0+、Internet Explorer8.0+、Firefox3.0+、Opera9.6+和Safari4.0+。Facebook已经使用了这个功能,用postMessage支持基于Web的实时消息传递。服务器
otherWindow.postMessage(message,targetOrigin);cookie
otherWindow:对接收信息页面的window的引用。能够是页面中iframe的contentWindow属性;window.open的返回值;经过name或下标从window.frames取到的值。app
message:所要发送的数据,string类型。
targetOrigin:用于限制otherWindow,“*”表示不做限制。
代码以下:
简述原理与过程:
首先在客户端注册一个callback,而后把callback的名字传给服务器。此时服务器先生成json数据。而后以JavaScript语法的方式,生成一个function,function的名字就是传递上来的参数jsonp。最后将json数据直接以入参的方式,放置到function中,这样就生成了一段js语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的JavaScript文档,此时数据做为参数,传入到客户端预先定义好的callback函数里。
引用:http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html