当前位置: 首页 > Web前端 > HTML

iframe嵌套微信公众号不显示最佳解决方法

时间:2023-04-03 00:30:02 HTML

代码参考地址:https://github.com/whj0117/wx...1.问题原因:新需求需要使用iframeembeddingSet微信公众号显示,但是由于微信的拦截限制,也就是说设置了响应头"frame-ancestores:self",所以无法在iframe中打开;也查了很多资料,基本都是围绕cors-Anywhere技术进行ajax请求,返回限制访问的页面DOM请求,渲染页面;测试的时候发现cors-anywhere因为被很多人滥用,而且越来越频繁,早在2021年1月31日就已经停止开放代理了,所以现在请求会返回403(AccessDenied)地位。2、解决方法:可以下载cors-anywhere项目到本地https://github.com/Rob--W/cor...,通过node.js在本地启动服务,可以设置“cors-anywhere.herokuapp.com”的访问地址改为ajax请求的本地“127.0.0.1”;接口请求成功后,会返回整个访问地址的DOM结构。注意:如果是在本地请求,css文件下载会失败,所以又使用了nginx搭建本地服务,接下来我们一起看看流程。3.详细实现过程:如果我们直接访问//cors-anywhere.herokuapp.com/地址,会出现下图拒绝访问:所以我们需要去https://github.com/Rob--W/cor...将整个项目下载到本地,目录结构如下图:3、接下来我们打开server.js文件,首先会看到设置ip和端口的变量两条线。我自己配置??如下,其他不需要改动:4.然后我们依次执行:npminstallnodeserver.js5。这样cors-anywhere的跨域服务就起来了,查看是否成功,访问127.0.0.1:8090,看到下图表示成功:6??、以上内容主要是Configuration实现,然后你可以编写业务代码。我的实现是在本地新建一个index.html页面,然后引入jquery的cdn进行ajax请求。使用vue或者react的朋友也可以使用axios进行请求和返回结果一样,代码如下图。注意:值得注意的是,微信公众号的img显示全部是data-src,所以我们需要将所有data-src换成src,否则图片无法显示。已经显示出来了,但是细心的朋友应该看到了,整体的风格是不自适应的,是不适应我们的屏幕的。后来研究发现是因为所有的css都没有加载,css的地址从https变成了file,手动修改成https再引入就没有问题了。8、后来想到可能是因为index.html是通过本地路径访问的,可能有些限制。(如果哪位大佬明白原因,也可以给我留言),所以使用nginx打开本地服务器访问index.html。至此所有文件加载成功,页面正常显示。9.但是当你看到页面的时候,你可能会遇到这种问题。由于微信屏蔽,所有图片都被限制访问,会出现如图所示的问题。别着急,我已经找到了一个好方法,只需要一行代码就可以搞定,没错,大家可以看到我圈出来的meta标签,添加之后就可以正常访问了。结尾