您的位置:首页 > 移动开发 > 微信开发

解决H5页面在微信中跳转时URL不变的问题

2019-05-14 11:18 609 查看

最近做了一个功能,H5页面需要在微信中打开,到最后一个页面时,需要重新再浏览器中打开,然后调起APP,使用vue-router的hash模式,根据网上的办法,一直实现不了,现在目前有两个办法

1. hash模式改成history模式:

history发布的时候会比hash模式外面多添加一个文件夹;finance

  1. 首先把vue-router里面的路由配置的mode改成history模式,然后前端需要配置一个404页面:
export default {
mode: 'history',
base:'/finance/',//服务器里面根目录添加一个文件夹
routes: [
{
path: '/index.html',
name:'introduce',
component: r => require.ensure([], () => r(require('../views/introduce')), 'introduce')
},
{
path: '/intention.html',
name:'intention',
meta: {
title: '补充个人信息'
},
component: r => require.ensure([], () => r(require('../views/intention')), 'intention')
},
{
path: '/myloan.html',
name:'myloan',
meta: {
title: '悦农e贷'
},
component: r => require.ensure([], () => r(require('../views/myloan')), 'myloan')
},
{
path: '/agreement.html',
name:'agreement',
meta: {
title: '协议'
},
component: r => require.ensure([], () => r(require('../views/agreement')), 'agreement')
},
{
path: '/errorPage',
name:'errorPage',
meta: {
title: '错误'
},
component: r => require.ensure([], () => r(require('../views/errorPage')), 'errorPage')
},
]
}

为了可以多个项目区分,所以想要在打开的时候添加一个文件夹来区分例如:http://c-test.duckdns.org:10002/finance/index.html这样来打开,所以要使用一个base属性:

  1. 打包的时候要修改一下打包配置,因为目前hisTory模式相当于把我们的项目外面多加了一层文件夹:finance
    1.修改配置文件config文件夹下面的index.js的build配置
build: {
// Template for index.html
prodEnv: require('./prod.env'),
sitEnv: require('./sit.env'),
uatEnv: require('./uat.env'),
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/finance/',//把原来的/改为/finance/
productionSourceMap: true,
devtool: '#source-map',
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
bundleAnalyzerReport: process.env.npm_config_report
}

2.修改build文件夹下面的webpack.prod.conf.js文件

output: {
publicPath: '/finance/',
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},

3. 接下来就是修服务器里面的配置:history模式需要服务器配置404页面都指向你的index.html页面,我这边使用的是NGINX服务器,nginx配置如下:标识所有页面都尝试去找你的index.html页面

location ^~/finance {
root   D:/ngins/finance;//index文件所在目录
index  index.html;
try_files $uri $uri/ /index.html;
}

4. 这样改好之后安卓可以实现功能,但是ios里面URL还是一直不变,单独的针对ios需要在router.afterEach里面做处理

router.afterEach((to, from) => {
const u = window.navigator.userAgent.toLowerCase()
(u.indexOf("like mac os x") < 0 || u.match(/MicroMessenger/i) != 'micromessenger') return
if(u.match(/MicroMessenger/i) != 'micromessenger') return
if (to.path == 'myloan.html') {
location.assign(to.fullPath)
}
})
2. 或者可以尝试把单页面改成多页面的项目,这个目前还没有尝试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐