Uniapp项目实战之H5端运行到外置浏览器存在跨域问题的解决

本文介绍如何解决Uniapp在H5环境下遇到的跨域问题,通过配置webpack-dev-server代理实现。详细步骤包括修改manifest.json文件,设置devServer参数,以及如何使用封装的uni.request进行请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Uniapp在官方api中已经明确表示H5 端本地调试时会遇到跨域问题,其实官方api已经明确给出了解决方案,在此记录以防踩坑,官方解决方案

在这里插入图片描述

二、官方推荐使用方案一:使用HBuilderX内置浏览器;方案二:配置webpack-dev-server代理;方案三:给浏览器安装跨域插件,禁止浏览器报跨域;方案一内置浏览器用起来总是有点感觉不舒服,方案三可能插件不起作用,这里我们使用方案二

1.使用HBuilderX新建uniapp项目,找到manifest.json文件然后找到源码视图模块而后再在其中找到H5模块

在这里插入图片描述

2.然后就可以在其中添加如下

devServer

    "h5" : {
        "router" : {
            "mode" : "hash" // 路由模式
        },
        "devServer" : {
            "https" : false, // 是否启用 https 协议,默认false
            "port": 8080, // 端口号
            "disableHostCheck": true, // 禁用 Host 检查,默认false
            "proxy": { // 与vue中的proxyTable配置大致上一致,此处我同时代理了两个
                "/dev": { // 测试
                    "target": "http://xxx.xxx.x.xxx:xxxx", // 目标接口域名
                    "changeOrigin": true, // 是否跨域
                    "secure": false, // 设置支持https协议的代理
                    "pathRewrite":{"^/dev":""} // 这个一定要加,意思就是把你项目中一dev开头的接口自动替换为 target + pathRewrite第二个参数来进行数据的请求(pathRewrite没有第二个参数的话直接为target)
                },
                "/pre": { // 预发布
                    "target": "http://xxx.xxx.x.xxx", // 目标接口域名
                    "changeOrigin": true, // 是否跨域
                    "secure": false, // 设置支持https协议的代理
                    "pathRewrite":{"^/pre":"/api"} // 此处pathRewrite加第二个参数是因为我的接口最后都有一个/api,在这个地方加/api等价于直接在target后加/api
                }
            }
        }
    }

3.使用

可使用new Promise将uni.request封装起来

		uni.request({
			url: '/dev/****/****/***', // dev或pre亦或者是其他开头,会检测到开头而后自动替换为代理的域名
			header: {},
			timeout: 30000, // 响应时间
			method: 'POST' // 请求方式
			data: {}, // data数据,有就传没有就不传
			success: (res) => { // 请求成功
				console.log('请求成功: ', res)
			},
			fail: (req) => { // 请求失败
				console.log('请求失败: ', {url: baseUrl + url, ...req})
			},
			complete: function () { // 无论成功失败
			},
		})
Uniapp 是一个平台的应用开发框架,可以将一个应用同时打包成 H5、小程序和 APP 等多个平台。在将 Uniapp 应用运行浏览器时,由于浏览器的同源策略,可能会遇到问题。那么如何解决呢?以下是几种可能的解决方案。 1. 在后台设置请求头。如果 Uniapp 应用需要访问后台接口,可以在后台服务器上设置响应头,允许来自特定名的请求。例如,在 PHP 后台可以添加以下代码: ``` header('Access-Control-Allow-Origin: http://yourdomain.com'); ``` 其中 `yourdomain.com` 是允许请求的名。 2. 使用代理服务器。在开发环境下,可以使用代理服务器来绕过同源策略。比如,使用 `http-proxy-middleware` 做代理,将需要请求的接口代理到同下的接口。这样,在本地开启的服务器就可以访问后台接口了。 3. 在 config 文件夹下的 index.js 中设置反向代理。根据需要进行配置,通过修改 proxyTable 将目标服务器的地址和口指向本地的代理服务器,从而实现。例如: ``` proxyTable: { '/api': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/api': '' } } } ``` 其中,`/api` 是需要反向代理的路径,`target` 是目标服务器的 IP 和口,`changeOrigin` 设置为 `true` 表示修改请求头,将主机名设置为目标服务器的地址,`pathRewrite` 用于重写路径。 4. 使用 JSONP。如果后台接口可以返回 JSONP 格式的响应,可以在前通过动态插入script 标签的方式实现请求。 以上是几种可能的解决方案,根据实际情况选择合适的方法即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值