美文网首页
JS与跨域

JS与跨域

作者: 云峰yf | 来源:发表于2017-08-17 23:13 被阅读0次

前言

在前后端通信的时候,由于浏览器的同源策略限制,很多时候我们都有跨域的需求,而不同的跨域方法,适用于不同的跨域场景。

JSONP

JSONP的原理就是创建一个script标签,从而借助这个脚本请求去实现跨域的,因为请求静态js文件不受同源策略的限制。
它只支持get方法跨域,而且不方便监听错误和HTTP状态码等

let script = document.createElement('script')
let url = ""

//加上回调方法好拿到数据
script.src = `${url}?callback=callback`
//添加这个脚本到文档里去
document.head.appendChild(script)

function callback(data){
    console.info("jsonp",data)
}

这里有一点要注意,使用了jsonp的话打开chrome的network抓包会发现response是callback&&callback(...),这就是jsonp中的p(padding)的含义:填充进脚本的json。

CORS参考资料

目前最常用的跨域解决方案

服务端设置Access-Control-Allow-Origin字段

postmessage

HTML5新增的跨域方案

// 窗口A(http:A.com)向跨域的窗口B(http:B.com)发送信息
window.postMessage('data', 'http://B.com');
// 在窗口B中监听
window.addEventListener('message', function (event) {
  console.log(event.origin);
  console.log(event.source);
  console.log(event.data);
}, false);

通常也是结合iframe用,相关文章

WebSocket参考资料

独树一帜

var ws = new WebSocket('wss://echo.websocket.org');

ws.onopen = function (evt) {
  console.log('Connection open ...');
  ws.send('Hello WebSockets!');
};

ws.onmessage = function (evt) {
  console.log('Received Message: ', evt.data);
  ws.close();
};

ws.onclose = function (evt) {
  console.log('Connection closed.');
};

url的hash

适用于简单的场景

// 在A窗口中:
var B = document.getElementsByTagName('iframe');
B.src = B.src + '#' + 'data';
// 在B(iframe)窗口中:
window.onhashchange = function () {
  var data = window.location.hash;
};

相关文章

  • 跨域问题详解分析

    参考文档 CORS详解 跨域资源共享 CORS 详解 js中几种实用的跨域方法原理详解 跨域的那些事儿 跨域与跨域...

  • HTML-获取iframe元素的正确方法

    跨域相关文章详解js跨域问题JavaScript跨域总结与解决办法 解释最清楚的jsonpWhat is JSON...

  • 跨域

    跨域 什么是跨域: 解决跨域 通过jsonp原理:在页面引入跨域js和css时,没有存在跨域问题.因此可以动态创建...

  • 2021-02-23

    一、什么是跨域 二、vue.config.js 跨域配置

  • JS与跨域

    前言 在前后端通信的时候,由于浏览器的同源策略限制,很多时候我们都有跨域的需求,而不同的跨域方法,适用于不同的跨域...

  • JSONP、CORS、跨域

    跨域 同源:两个文档同源需满足:协议、域名、端口相同跨域:不同域之间相互请求资源,就算作“跨域“。js进行DOM操...

  • 网页请求(同源策略)

    跨域与同源策略 跨域:是指的通过JS在不同域之间进行数据传输或通信。同源策略:它是由Netscape提出的一个著名...

  • 怎么能学好Web前端开发,如何去解决JS跨域问题

    如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或...

  • 如何去解决JS跨域问题 怎么能学好Web前端开发

    如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或...

  • 关于js中的跨域

    @(JS技巧)[跨域] 各种跨域方法详解 总是在听说跨域,可是自己除了JSON,其它的方法其实并不是真的理解。今晚...

网友评论

      本文标题:JS与跨域

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