0
点赞
收藏
分享

微信扫一扫

Chrome 101 版本 document.domain 将变为可读属性 解决方案

罗子僧 2022-01-25 阅读 113

document.domain 将变为可读属性

假如我们有这样一个场景:

我们在一个页面 https://a.conardli.com 嵌入了一个 iframe 页面 https://b.conardli.com。它们的二级域名都是 conardli.com。

这时候,因为浏览器的同源策略限制,我们主页面和 iframe 肯定是无法通信的。

在这里插入图片描述

假如我们还有这样一个场景:

上面两个网页,在还没上线的时候,可能我们这时候要在本地调试功能,可能把它们部署在本地的不同端口上:
http://localhost:8888/
http://localhost:6666/
默认情况下它俩肯定也是不能跨域通信的,这时候我们可以把它们的 document.domain 都设置为 localhost,就可以跨过端口不同的限制了。

替代方案一

主页面:https://a.conardli.com

// 给 https://b.conardli.com 发消息
iframe.postMessage('哈喽', 'https://b.conardli.com');

// 接收信息
iframe.addEventListener('message', (event) => {
  // 把不想要的信息过滤掉
  if (event.origin !== 'https://b.conardli.com') return;

  if (event.data === 'succeeded') {
    // 干点别的 ...
  }
});

iframe 页面:https://b.conardli.com

// 接收信息
window.addEventListener('message', (event) => {
  // 拒绝掉乱七八糟的信息
  if (event.origin !== 'https://a.conardli.com') return;
  
  // 回复消息
  event.source.postMessage('succeeded', event.origin);
});

替代方案二

Origin-Agent-Cluster http 标头(规范) 允许页面请求被源(而不是站点)隔离。如果设置为 true ( Origin-Agent-Cluster: ?1 ),则要求浏览器按来源隔离页面。如果为假,则按站点。(Agent Cluster 是隔离组的规范。由于低级隔离在 API 层不可见,规范只是粗略地触及主题。)

Origin-Agent-Cluster: ?0
举报

相关推荐

0 条评论