美文网首页一起学起来Web前端之路让前端飞
记录app webview内嵌vue单页应用所遇到的坑

记录app webview内嵌vue单页应用所遇到的坑

作者: Chance722 | 来源:发表于2017-07-12 02:16 被阅读10188次

前言

背景是项目组做的是一个类似唱吧跟全民k歌的软件,所以偶尔会做一些关于k歌的运营活动,这时候就需要在app的webview中内嵌h5来快速开发一个个活动,由于一个活动有许多模块是可以抽出来当组件用的,如轮播banner、歌曲榜单列表、评论互动区、参赛歌单等等,所以就有了用vue开发一个基于单页应用的活动模板,用于日常通用的k歌活动这样的想法。

so在这个过程中无可避免的还是踩了一些坑,所以记录之,先大致说下用到的技术栈:vue全家桶(vue/vue-router/vuex)、sass、axios还有一套ui框架mint-ui,大致也就这些。下面来扒扒都遇到哪些坑。

1.vue-cli脚手架打包的项目部署到服务器上打开空白
首先可以确保路径是没问题的,vue-cli打包生产环境直接修改config目录下的index文件即可。将assetsPublicPath指向你所要放置的服务器目录,并用最后一个文件夹名作为你的项目名。如 http://baidu.com/app/events/my_activity。 那路径没问题的话。问题出在哪里呢?经过排查,是vue-router中将mode设置为'history'的缘故。由于一开始以hash模式的url是带'#'号的,本来想着让url好看点,所以用了history模式。虽然在本地调试的时候没问题,但是不部署的话还是需要后台进行相关配置的。这里百度一大堆,不赘述了,随便贴个地址,看这里

2.webview上自带的坑
讲真的这个只能找你们移动开发的同事。比如我这边遇到的是H5页面内嵌的时候上拉下拉会出现回弹的效果,这是他们加上的,这个难免会对h5造成一些手势冲突。比如我只是想滑动底部的时间选择器来选时间,但是页面不受控制会自动上弹。还有就是定位在中部或底部的输入框,理应在弹出软键盘时自动将键盘顶上去的,这个也应该由移动端开发那边来做相关设置。

3.单页应用不重载页面导致无法调用IOS的某些回调函数
这个是真的坑。在浏览器上跑都好好的,内嵌进app的时候发现ios打开页面后一直有一朵小菊花在loading,尽管数据已经加载完成了。切换页面也一样,除非刷新页面。那问题来了,谁的锅?又是经过一系列排查,发现这个是单页应用跟移动端那边开发的控件相互作用引起的坑。(关我毛事?)那个loading控件是移动端那边用来判断webview加载情况的,在网络请求跟数据请求时都会调用打开这个控件,然而悲剧的是关闭这个控件也就是WebviewDidFinishLoad函数却必须是页面有进行重载才会发起调用的,也就是说loading你是开了,但是我单页应用怎么来都是在一个页面上操作,自然不会重载,所以也就导致了那朵小菊花一直在转,这也是为什么强制刷新的话可以关闭掉loading控件的原因。这个嘛安卓那边不会有问题,所以应该是ios开发那边的问题,就算loading也应该有个时长可以关闭,或者可以写个接口通过webview的形式让前端去手动调用关闭loading控件,都是可以的。

4.es6对于一些老旧的安卓机型和浏览器的兼容问题
这个一开始还是比较头痛的,毕竟是上了线才发现的问题,陆陆续续在后台收到一些安卓机的反馈,打开活动页面一片空白。看了下大多是安卓4.4.2还有一些4.4以下的安卓机型。这尼玛vuejs不是兼容到安卓4.4吗?所以一开始以为是axios跟mint-ui的问题,但后面发现其实不是。主要原因是对es6兼容不够到位,虽然vue-cli引入了babel对js语法进行降级,但是还是有些老旧的机型会发生各种各样的问题,这里需要引入一个叫babel-polyfill的包。所以你只需只在你引入import vue之前 import babel-polyfill进来就可以了,主要是为了让es6对个别机型做到兼容。

相关文章

  • 记录app webview内嵌vue单页应用所遇到的坑

    前言 背景是项目组做的是一个类似唱吧跟全民k歌的软件,所以偶尔会做一些关于k歌的运营活动,这时候就需要在app的w...

  • cnode社区

    面试要点:(单页应用重点在vue-router) 单页应用,页面只有一个 APP组件; vue-router实现页...

  • 前端路由与Vue Router

    Vue Router 是Vue.js的官方插件,用来快速实现单页应用 单页应用 SPA(Single Page A...

  • 前端面试日更解答 2020-03-22

    101.[vue]Vue的单页应用中如何引用单独的样式文件 102.[vue]Vue键盘事件用法(流量充值项目记录...

  • Vue 单页应用(spa)前端路由实现原理

    一文搞懂单页应用原理Vue项目History模式路由机制 源码分析VueVueRouter Vue 单页应用(sp...

  • 2--Vue-Router

    1. 单页应用模式SPA和多页应用模式MPA 2. 简单介绍(目录文件的基本使用) a. App.vue 模板结...

  • 关于VUE-Router一些记录

    单页应用如何得到多页应用的体验,VUE给我们提供了vue-router,此文不谈论如何安装如何使用,只记录下一些在...

  • vue多页应用

    vue如何将单页面改造成多页面应用 vue单页多页的开发环境配置+vue的开发思路

  • webpack前端编译优化

    放开公司其他单页应用的项目不说,在我们快速迭代的app中,内嵌了很多h5页面,这些页面在不同的业务线中,也没有任何...

  • Android之WebView

    简介 WebView是Android中用于加载web页面的控件 优点 可以直接内嵌到App中用于显示和渲染web页...

网友评论

  • coder_su:楼主我想请问有关vue和android的webview上怎么做交互,有相关的代码可以了解吗,十分感谢
  • bugPlus:请教楼主个问题,webview原声导航返回上一页是用app提供的一个h5方法让前端去返回一个url,测试发现ios上页面跳转点击导航返回只能触发一次正确返回地址,再往后返回就跳出了vue的页面。。。
    bugPlus:@bugPlus 这个方法我是在route.beforeResolve 拦截器统一配置返回地址,返回的地址一个包括域名完整的url
  • 緣份的忝空_22e9:楼主 我们也在把单页面应用嵌入到app中请问 我把本地工程包放入app工程中 它取加载本地路径 可以把页面加载出来吗 还是说必须部署到服务上
    Chance722:@緣份的忝空_22e9 部到服务上加载链接地址
  • splig:最近我正在开发类似的功能,我发现手机端vue页面内部跳转时不走webviewdelegate,我本来想在代理里获取每个vue页面的title,结果不走代理,所以这个功能无法实现,请问还有什么别的办法吗?
    Dwyane_Coding:解决了吗
    Chance722:@splig vue路由那里设置title 你跳转的时候不能显示么?
  • cuiyalei:我们的VUE项目今天在安卓4.* 和5.* 系统上测试,界面可以正常显示,但是后台数据请求不下来,不知道你有碰到这个问题吗?还望解惑!
    dedb669ea161:检查下是不是跨域的问题
    Chance722:@cuiyalei 没有哦 有调试看下吗
  • SmallTwo:话说你们app内容加载vue页面的时候 h5跳转路由的时候是 app拦截创建新的webview还是只是在vue页面内跳转
    泪无痕_67:@SmallTwo 你好,app拦截创建新的webview,现在问题是app那边无法拦截到vue的路由,请问你是怎么解决的??
    SmallTwo:@Chance722 那还好。如果要单独跳得额外处理拦截路由
    Chance722:我这边只是vue页面内跳转
  • d4a41519402c:都遇到过,第四个我是用的降级webpack-dev-server到2.7.1解决的
  • troybug:我用手机浏览器直接打开vue项目时性能很好,但打包成App后,动画总是有卡顿,最基本的上下滑动都有一定的延迟,请问楼主对这方面有什么优化经验或者解决方案?Android版本是5.1
    Barrett07:大佬 卡顿问题解决了吗?
  • 899d1dbaf230:内嵌vue怎么开发的?把vue先上线?本地运行vue,Android studio运行的时候链接自己机子的ip地址可以吗
  • seven_2547:请教一个问题 app内嵌vue单页是直接加载 vue单页的链接吗
    Chance722:@899d1dbaf230 vue先部署到测试线 然后app用webview去加载测试线地址 没问题再转到正式线
    899d1dbaf230:内嵌vue怎么开发的?把vue先上线?本地运行vue,Android studio运行的时候链接自己机子的ip地址可以吗
    Chance722:@seven_2547 也可以这样说吧
  • dd3c02ba1bdb:这些坑都遇到过了
    Chance722::joy: 冰山一角
  • f48595f36b29:老铁,你们vue页面的转场都是前端来弄的?
    Chance722:转场?页面跳转不是由vue路由控制跳转的吗你们
  • 10745d08cbe0:我要是早一天看到你的这篇文章我就不会为了IOS浪费我今天一天的时间了,还有4.4以下系统我正准备明天测试,看来不用测了,改代码去喽!
    Chance722:哈哈
  • 呼呼呼lys:vivo下载app后一打开就提示‘停止运行’,你有遇到这个问题么
    写代码的小书童:@Chance722 麻烦问一下 怎么嵌入到app里面的。。
    呼呼呼_4464:@Chance722 恩恩,我们是为了快速开发,整个app都是vue的,结果出现了好多问题:sweat:
    Chance722:我并没有打包成app哦 只是做成单页应用内嵌到app里面
  • 萌鱼鱼:哈哈,找到了!
    Chance722:@stone_d455 怎么说
    stone_d455:最坑的是axios

本文标题:记录app webview内嵌vue单页应用所遇到的坑

本文链接:https://www.haomeiwen.com/subject/oxsxhxtx.html