由于浏览器的同源策略,localStorage 不能直接进行跨域访问。每个域名下的 localStorage 都是独立的,一个域名下的 localStorage 无法读取到其他域名下的 localStorage。
但是,有一些方法可以实现跨域共享数据:
- 通过服务器:可以通过服务器来进行数据的传递。例如,域名 A 将数据发送到服务器,然后域名 B 从服务器获取数据。
- 使用 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');
- 使用 document.domain:如果两个页面的二级域名相同,那么可以通过设置 document.domain 来实现跨域访问。
// 页面 A
document.domain = 'domain.com';
localStorage.setItem('key', 'value');
// 页面 B
document.domain = 'domain.com';
console.log(localStorage.getItem('key'));
- 使用 Web Storage API (localStorage 和 sessionStorage):这种方法只适用于同一主域下的不同子域之间的跨域访问。
// 页面 A
localStorage.setItem('key', 'value');
// 页面 B
console.log(localStorage.getItem('key'));
请注意,以上方法都有其适用的场景和限制,需要根据实际情况选择合适的方法。