Javascript 跨域

跨域:协议、域名、端口 任何一项不同即为跨域。

 

1、jsonp 不受跨域限制。

 

2、域名不同,但主域名相同的窗口,可以修改 document.domain = "主域名" 来实现同源(同理,还有 cookies 的共享设置也是通过这种方法),一级 XMLHttpRequest 也可以通讯。

 

3、 iframe 窗口与父窗口在跨域情况下,可以互相获取 window 对象(iframeNode.contentWindow、 window.parent),但不能访问 window 对象的属性,topWindow 不能获取 iframe 中 的 iframe window 对象(因为无法获取 iframe 中的 iframeNode),反之却可以 (window.parent.parent)。

 

4、window.name 属性在 location.href 被修改后仍然保留,parent 中修改 iframe 的 src 为同域名后可以访问 iframe 的 window.name 。

 

5、iframe 窗口在跨域情况下虽然不能访问window 的属性值,却可以修改 window.location.href,修改 location.href 的锚点不会发起请求。

 

6、获取 window 对象(包括 iframeNode.contentWindow、window.open 创建的窗口,当然也可以蛋痛地向本窗口 postMessage )后使用 HTML5 的window.postMessage 方法, iframeNode.contentWindow.postMessage("msg"," * 或 contentWindow中的域名") ,在 iframe 中使用 window.onmessage 事件实现跨域消传送,注意,iframe 在加载完毕后,父窗口 的 onload 事件才触发,不要在 onload 事件之前( iframe 加载完毕前)就 postMessage。

 

7、二级 XMLHttpRequest 跨域: 服务器返回响应头 Access-Control-Allow-Origin:请求方域名,浏览器发往服务器的 origin 请求头包含了请求方域名,这是由浏览器自动发送的,并且不能修改。

 

8、websocket 将 http 协议升级为 ws 协议。

 

9、window.name 和 location.hash 存储的信息比较少,不适用单次的大数量传输,window.name 没有消息送达的提示方式,靠定时检测,IE 6/7 没有 onhashchange 事件,也靠定时检测。

 

10、借助 flash 和 在 server 发送的跨 域请求,这已超出 javascript 范畴,6、7、8 方法不适用于古董级浏览器,对于 window 属性能够的读取限制多发生在 比较新的浏览 器(比如 opera),一般这些浏览器都支持 postMessage,可以通过检测手段优先使用 postMessage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值