本文介绍: iframe 标签嵌套页面,可能会遇到 xframeoptions 的值为 denysameorigin 情况,此时可能出现:xxx.xxx.xxx 拒绝我们连接请求。往往被嵌套页面设置决定了是否嵌套

上周被提出一个项目页面嵌套别人网站两个页面的需求,后经过 demo 测试网上查找,最终推翻了这个嵌套方案需求。稍微总结下出来,给同样需求的人少点弯路。

iframe 嵌套展示是第一步

嵌套别的页面很简单,直接把被嵌套页面的 url 设置src 的值,例如: ,假如展示出页面来就很好办了,用 iframe 自带属性使用自己页面的 cssjs,把嵌套的页面展示自己想要的样子。但不展示出来恐怕就难办了,因为这个原因往往是被嵌套页面决定的,自己页面很难改变。

展示不出来很多情况是:xxx.xxx.xxx 拒绝了我们连接请求

这个拒绝不属于跨域问题,因为同源策略里允许 iframelinkimgscript 标签跨域
这个根本原因是我们请求document返回的 X-Frame-Options(在 response headers 里)决定的。X-Frame-Options 有三个值: DENY、SAMEORIGIN、ALLOW-FROM。当是 deny 值时,代表任何网站页面都不能嵌套此页面,嵌套了就会出现上面的拒绝连接提示;当是 sameorigin 值时,代表只能跟嵌套页面同域名时才能嵌套,否则同样拒绝嵌套;allow-from 值已被弃用,之前相当列白名单功能;当请求的页面不设置这个属性时,代表次页面能被嵌套。( 需注意被嵌套的页面是否设置frameancestors 属性,因为浏览器可能废弃了 X-Frame-Options 属性,转变支持 Content-Security-Policy HTTP 响应头的 frameancestors 属性) – – 参考文档 mdn

在这里插入图片描述
所以通过被嵌套页面请求返回的属性可以大体上判断是否能嵌套此页面了。对于 sameorigin 值时,网上讲的能通过请求代理伪装成同域名请求估计能行,可能麻烦些,需要后端配合设置

iframe 交互是第二步

iframe 能够嵌套展示别人页面,并不代表自己页面能跟别人页面互相传递数据进行交互。互相传递数据就涉及到跨域问题了,其实就是浏览器同源策略引起的问题,限制访问数据storagecookieindexedDB)、操作 domajax 请求访问数据限制常用的是 postMessage 来解决postMessage 是 html5 的 api,其允许来自不同源脚本采用异步方式进行通信。这种通信交互需要两个页面的开发人员约定配合,不是单独一方就能完成的交互

原文地址:https://blog.csdn.net/weixin_43714836/article/details/127974248

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23796.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注