前端Img使用图片跨域问题是怎么引起的?该如何解决呢?

24 篇文章 0 订阅

在项目种遇到一个问题,图片在dom节点这种使用了<img>标签来加载可以正常显示,但是运用到style中没有经过标签的加载就会出现跨域的问题
在这里插入图片描述

怎么会引起这个问题呢?

1.通过<img> 加载的图片,浏览器默认情况下会将其缓存起来。

2.当我们从 JS 的代码中创建的 <img> 再去访问同一个图片时,浏览器就不会再发起新的请求,而是直接访问缓存的图片。但是由于 JS 中的 <img> 设置了 crossorigin,也就意味着它将要以 CORS 的方式请求,但缓存中的图片显然不是的,所以浏览器直接就拒绝了。连网络请求都没有发起。

3.在 Chrome 的调试器中,在 network 面板中,我们勾选了 disable cache 选项,验证了问题确实如第 2 点所述,浏览器这时发起了请求并且 JS 的 <img> 也能正常请求到图片。

如何解决这个问题?

1.在工作中遇到这个问题的话,就需要你的后端小伙伴在服务器配置一个字段

Access-Control-Allow-Origin: *

如果服务器不配置,客户端怎么操作也是没用的。
2.如果你现在已经遇见这个问题的话,想要怎么解决的话,在解决问题之前记得清楚一些浏览器缓存的图片。

总结

1.同一张图片或者同一个地址,同时被<img> 所访问,而随后后又会被如 JS 中去访问。而图片存储的地址是跨域的,那么就可能因为缓存问题而导致 JS 中的访问出现跨域问题。
2.解决的办法是让 <img>标签和 JS 中的访问都走跨域访问的方式,这样既可以解决跨域访问的问题,也可以解决跨域图片在 canvas 中的复用。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UniApp 是一款支持多个平台的跨端开发框架,它可以将一份代码同时转化成可以运行在多个平台上的应用程序,包括 iOS、Android、H5 等平台。 在前端开发中,H5 平台是最为常见的一种平台,因为它可以直接在浏览器上运行,无需安装应用程序。如果你要解决 UniApp 前端开发中的 H5 跨域问题,你可以通过以下几种方式来进行配置: 1. 通过设置 App.vue 文件中的 meta 标签,指定 H5 应用程序的访问权限,如下所示: ```html <meta http-equiv="Content-Security-Policy" content="default-src *;img-src * data:"> ``` 这段代码中的 Content-Security-Policy 指定了 H5 应用程序的默认源和图像源,其中 * 表示允许所有源进行访问,data: 表示允许使用 data 协议访问图像资源。 2. 通过在 uni-config.json 配置文件中添加 devServer 字段,指定跨域的代理配置,如下所示: ```json { "devServer": { "proxy": { "/api": { "target": "http://localhost:3000", "changeOrigin": true, "pathRewrite": { "^/api": "" } } } } } ``` 这段代码中的 proxy 配置可以将所有以 /api 开头的请求代理到指定的目标地址,同时修改请求头中的 origin 字段,避免跨域问题。 3. 通过在 uni-app 的 manifest.json 文件中添加配置,指定 H5 应用程序的访问域名,如下所示: ```json { "h5": { "devServer": { "port": 8080, "host": "localhost", "publicPath": "/", "disableHostCheck": true }, "router": { "mode": "hash", "base": "/" }, "appPlus": { "useweweb": false, "enableWKWebview": false }, "app": { "name": "uni-app", "theme": "#000000", "backgroundColor": "#f7f7f7", "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#ffffff", "navigationBarTitleText": "uni-app", "navigationBarTextStyle": "black", "navigationStyle": "default", "enablePullDownRefresh": false, "onReachBottomDistance": 50 }, "mp": {}, "tt": {} } } ``` 在上述代码中,我们可以通过设置 devServer.host 字段来指定 H5 应用程序的访问域名,从而避免跨域问题。 以上是我为你提供的三种解决 UniApp 前端开发中 H5 跨域问题的方法,希望可以对你有所帮助。如果你还有其他问题,欢迎继续

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值