js 中的跨域

同源策略

同源定义

协议,主机,端口号三者完全相同,称为同源。

限制范围

如果两个域非同源,则有以下限制

  1. cookie 无法读取
  2. dom 无法获得
  3. ajax 请求无法发送

跨域

js 中实现跨域请求,有以下几种方式

在iframe中跨域

两个窗口一级域名相同

通过设置 document.domian 为一级域名,可以跨域

两个窗口完全不同源

可以有以下三种方式解决跨域问题

  1. url.hash
    url.hash是指url中 #后面的部分
    父窗口把信息写入子窗口的 url 片段
var src=sonUrl+'#'+data;
document.getElementById('myiframe').src=src

子窗口监听信息

window.onhashchage=checkMessage();
function checkMessage(){
var message=window.location.hash
 }

子窗口向父窗口传递信息

function sendMessage(msg){
var hash=msg
parent.location.href=parentUrl+'#'+hash
}
  1. window.name
    父窗口打开一个不同源的网站,将信息写入 window.name 中
window.name=data

子窗口跳回一个与主窗口同域的网站

location='http://parenUrl/index.html'

主窗口可以读取子窗口的 window.name 了

data=document.getElementByName('myiframe').contenWindow.name
  1. window.postMessage
    otherWindow.postMessage(message,targetOrigin) 是html5新引进的函数
    otherWindow 是对接受信息的 window 的引用
    message 是所要发送的数据
    targetOrigin 是指接收消息的源,用于限制 otherWindow
    举例来说,父窗口 a.com ,向子窗口 b.com 发送消息
var popup=window.open('b.com','title')
popup.postMessage('hello world','b.com')

子窗口像父窗口发送消息

window.opener.postMessage('nice to meet you','a.com')

子窗口和父窗口都可以通过 message 时间监听对方消息

window.addEventListener('message', function(e) { console.log(e.data);},false);

在 AJAX中跨域

在 AJAX 中跨域有以下几种方式

  1. jsonp
    基本思想是跨域引用 js 脚本文件
    jsonp由两部分组成,回调函数和数据。回调函数就是当响应到来时在页面中调用的函数,数据就是传入回调函数中的json数据。

  2. webSocket
    一种通信协议,不实用同源策略,只要服务器支持就可以跨域。

  3. cores
    只要服务器实现了cors接口就可以跨域通信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    w_zhuan阅读 547评论 0 0
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    他在发呆阅读 830评论 0 0
  • 春光乍暖的日子里,桃花的香气徐徐而来,闲来无事之时,品一杯清茶,着一本闲书,独自享受片刻的静懿时光。时光如梭,岁月...
    安之若素520xia阅读 319评论 4 3
  • 一步步踏过的台阶心中有些沾沾自喜听说站在高处视野更开阔哦,清风 站在高处再不想仰望蓝天真的一个人的心很容易满足哦,...
    君凉阅读 499评论 24 52
  • 送你一句话:命运给你一个碗,你是去乞讨还是去收藏。 去年12月,出差在北京,遇到雨天,地下通道里来往些形色匆匆的路...
    414f864e9de0阅读 484评论 0 1