美文网首页
解决跨域问题

解决跨域问题

作者: 龚达耶 | 来源:发表于2019-07-07 01:03 被阅读0次

产生跨域的情况

同一域名,不同端口

同一域名,不同协议

域名和域名对应ip

主域相同,子域不同(www 为子域名 baidu.com为主域名)

协议和端口造成的跨域问题“前台”是无能为力的

  1. 当主域名相同子域名不同 document.domain设置成一样
document.domain = 'baidu.cn'
  1. location.hash

通过控制hash的变化来触发操作

  1. postMessage

第一个参数是发送的东西 为 string和对象
第二个为地址

// A
window.onload = function() {  
    var ifr = document.getElementById('ifr');  
    var targetOrigin = "http://www.google.com";  
    ifr.contentWindow.postMessage('hello world!', targetOrigin);  
};

// B
var onmessage = function (event) {  
  var data = event.data;//消息  
  var origin = event.origin;//消息来源地址  
  var source = event.source;//源Window对象  
  if(origin=="http://www.baidu.com"){  
console.log(data);//hello world!  
  }  
};  
if (typeof window.addEventListener != 'undefined') {  
  window.addEventListener('message', onmessage, false);  
} else if (typeof window.attachEvent != 'undefined') {  
  //for ie  
  window.attachEvent('onmessage', onmessage);  
}

以上都为双向通信即为嵌套iframe

接下来为单向

  1. jsonp

因为通过script标签引入的js是不受同源策略的限制的。所以我们可以通过script标签引入一个js或者是一个其他后缀形式(如php,jsp等)的文件,此文件返回一个js函数的调用

缺点只支持get

  1. CORS

Cross-Origin Resource Sharing

CORS主要是server来处理

不仅仅支持get还有post 但是需要新的浏览器

  1. window.name

如果在一个标签里面跳转网页的话,我们的 window.name不变

  • 表单跨域

所以form表单提交没有跨域问题,提交form表单到另外一个域名,原来页面是无法获取新页面的内容,或者说form提交后不需要返回,但是ajax是需要返回的。

而ajax是想要读取响应内容,浏览器是不允许你这么做的。

相关文章

网友评论

      本文标题:解决跨域问题

      本文链接:https://www.haomeiwen.com/subject/wqevhctx.html