终极跨域问题?

当前大家讨论的跨域都是这样的

  1. 有 iframe 的,父子,子子,子父子,直间跨。

  2. 多窗口的跨域。

我现在有个需求,需要在单窗口跨域。

即 当前窗口 a.com 发送数据,等窗口变成 b.com 接收数据。

比如:

当前是 a.com 中

window.location.href = 'b.com';

window.postMessage('123', '*');

b.com 中

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

很显然,是不 ok 的

第一: 我不知道 a.com 跳转到 b.com 这种方式中,window 是否是同一个? 我猜应该是
第二: 消息发送在前, message 监听在后。肯定是拿不到数据的。

这时候,我就想着先延迟发送看看。

window.location.href = 'b.com';

setTimeout(function() {
    window.postMessage('123', '*');
}, 3000);

这个也是不 ok 的,因为 setTimeout 内的代码 压根儿就不会再执行了。

页面跳转只执行完当前代码块,就跳转了,不再执行其它的代码块了。

请教:这种情形,该怎么跨域了?

阅读 2.8k
3 个回答

所以其实你想要的是

window.name

快承认吧。

简单说就是你想把a里的信息发送给b.

简单做法:

  1. 在跳转前把a的数据发给服务器,给个key值对应起来{a_bugall_msg:'把我传给b'}

  2. 传给服务器后在跳转的时候www.b.com的时候url后面加参数:www.b.com?sign=a_bugall_msg

  3. 当打开b网站的时候发请求给服务器拿取key值为"a_bugall_msg"的value,就是“把我传给b”

这样就实现了a中数据传给b的效果

你始终从a.com跳转到 b.com,那么直接传递一个URL参数或者URL的hash串也行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进