LocalStorage如何跨域获取

3,027 阅读1分钟

由于浏览器的同源策略,localStorage 不能直接进行跨域访问。每个域名下的 localStorage 都是独立的,一个域名下的 localStorage 无法读取到其他域名下的 localStorage。

但是,有一些方法可以实现跨域共享数据:

  1. 通过服务器:可以通过服务器来进行数据的传递。例如,域名 A 将数据发送到服务器,然后域名 B 从服务器获取数据。
  2. 使用 postMessage:HTML5 提供了一个全新的 API:跨文档消息传递(Cross-document messaging)。只要两个页面都同意,一个页面可以给另一个页面发送消息,无论这两个页面是否同源。
// 页面 A

window.localStorage.setItem('key''value');

window.open('http://www.domain-b.com');

// 页面 B

window.addEventListener('message'function(event) {

  if (event.origin !== 'http://www.domain-a.com'return;

  console.log('接收到的数据:', event.data);

}, false);

// 页面 A

var win = window.open('http://www.domain-b.com');

win.postMessage(window.localStorage.getItem('key'), 'http://www.domain-b.com');
  1. 使用 document.domain:如果两个页面的二级域名相同,那么可以通过设置 document.domain 来实现跨域访问。
// 页面 A
document.domain = 'domain.com';
localStorage.setItem('key', 'value');

// 页面 B
document.domain = 'domain.com';
console.log(localStorage.getItem('key'));
  1. 使用 Web Storage API (localStorage 和 sessionStorage):这种方法只适用于同一主域下的不同子域之间的跨域访问。
// 页面 A
localStorage.setItem('key', 'value');

// 页面 B
console.log(localStorage.getItem('key'));

请注意,以上方法都有其适用的场景和限制,需要根据实际情况选择合适的方法。