初试vue-cli使用HBuilderx打包app的坑

微信授权登录提示code-2

appid和appsecret应该是移动应用,而非网页应用

微信授权登录提示code:-100/自定义基座无法微信登录和分享

开发者账号配置的应用签名应该是md5加密后的值,而不是原字符串

生产环境proxyTable不生效,导致接口500

两种解决办法:
①入口文件使用网络地址,且和接口在同一域名下
②(推荐)

入口文件依旧是index.html

在config/prod.env和config/dev.env下添加API_ROOT

'use strict'
module.exports = {
 NODE_ENV: '"production"',
 API_ROOT: '"http://cross.precision-wechat.com"'
}

在main.js里设置baseUrl

axios.defaults.baseURL = process.env.API_ROOT

css内背景图片使用相对路径,打包测试不出现

修改config/index,js内的这一行

// Paths
  assetsRoot: path.resolve(__dirname, '../dist'),
  assetsSubDirectory: 'static',
  assetsPublicPath: './',

import进来的样式表没有被lib-flexible转为rem

转换写法,改为<style scoped src='../../assets/css/formReset.css'></style>

ApplePay沙盒测试登录app store失败

不能直接登录app store,需要在点击付款时登录沙盒账号

微博分享闪退

Dcloud的锅,在授权失败时授权层会闪现闪退,授权失败有两种情况,1网络问题授权失败2你没安装新浪微博,要再加一层判断,如果授权失败则进行提示。

plus.share.getServices(function(s){
      s.forEach(function(item) {
       if(item.id === 'sinaweibo') {
        $this.shares = item;
       }
      });
      if($this.shares.authenticated) {
       // 已授权
       $this.shares.send($this.sinashareMsg, function() {
        plus.nativeUI.toast($this.langs.SHARE_SUCCESS);
       }, function(e) {
        plus.nativeUI.toast($this.langs.SHARE_FAIL);
       })
      }else {
       // 未授权
       $this.shares.authorize(function() {
        $this.shares.send($this.sinashareMsg, function() {
         plus.nativeUI.toast($this.langs.SHARE_SUCCESS);
        }, function(e) {
         plus.nativeUI.toast($this.langs.SHARE_FAIL);
        })
       }, function(e) {
        // 授权失败
        plus.nativeUI.toast($this.langs.SHARE_FAIL);
       })
      }
     }, function(e){
      plus.nativeUI.toast(e.message);
     });

IOS真机测试,el-input光标全满,输入时错位

设置line-height=字体大小

iPhone X底部有个安全区,导致fixed+bottom的导航没有保持在最底部

打包后在index.html`

<meta name="viewport" content="width=device-width,initial-scale=1.0">`的content里加一句`viewport-fit=cover`

使用plus.createWebview创建webview打开第三方链接出现的诸多问题

①在打开的连接中执行一段脚本

$this.payw.evalJS(script);

安卓测试无错,iPhone不执行

解决:

将evalJS代码放在loaded里

$this.payw.addEventListener('loaded',function () {
    $this.payw.evalJS(string);
   });

②loaded内代码执行了两次,导致页面跳转两次

Dcloud的锅,解决办法:

var isLoaded = false;
   $this.payw.addEventListener('loaded',function () {
    if(isLoaded){return true}
    isLoaded=true;
    $this.payw.evalJS(string);
   });

③使用loading监听页面跳转,跳转到执行成功页面即close当前webview,但IOS下监听无效

Dcloud的锅,loading中webview.getUrl获取的永远是上一步的url,而不是当前页面的真正url

一开始想更换loaded,后来发现在IOS上loaded有些webview只执行一次,有些则能每次跳转都执行,不太稳定,最终决定使用progressChanged

解决方案:使用loaded来evalJS,progressChanged来对比地址

var isLoaded = false;
payw.addEventListener('loaded',function () {
  if(isLoaded){return true}
  isLoaded=true;
  payw.evalJS(string);
})
payw.addEventListener('progressChanged',function () {
  // 监听是否成功
  console.log(payw.getURL())
  var callbacklink = payw.getURL().split('?')[0];
  // if(callbacklink === successUrl) {
  //  plus.webview.close(payw)
  //  console.log('success');
  // }
  // if(callbacklink === failUrl) {
  //  // 支付失败
  //  plus.webview.close(payw);
  //  console.log('fail');
  // }
  // if(callbacklink === cancelUrl) {
  //  plus.webview.close(payw)
  //  console.log('cancel');
  // }
})

④progressChanged也会引发执行多次的问题

可以在判断成功后remove掉事件

$this.fbsharew.addEventListener('progressChanged', handlePChange );
 function handlePChange (e) {
 if($this.fbsharew.getURL().split('?')[0] === finishlink) {
  $this.fbsharew.removeEventListener('progressChanged', handlePChange );
 }
}

处理安卓返回键,使返回时关闭所有webview

// 写在mounted内
// 处理安卓返回键问题
  plus.key.removeEventListener('backbutton', handleBack );
  plus.key.addEventListener('backbutton', handleBack )
  function handleBack() {
   var wvs=plus.webview.all();
   for(var i=0;i<wvs.length;i++){
    if(wvs[i].getURL() !== plus.webview.currentWebview().getURL()) {
     plus.webview.close(wvs[i]);
     $this.switchUrl();// 判断是后退还是回到其他页面的方法
    }
   }
  }

动态添加的HTML节点如何绑定事件

有这个需求是因为有多语言版本,文本从后台读取。

比如

By creating your account, you agree to the Terms of Use and Privacy Policy of this site.

放在底部,点击其他地方无反应,但点击Terms of Use或者Privacy Policy则要出现条款浮层

解决办法:

后台添加语言仅修改文字,不要删除标签

<p>By creating your account, you agree to the<span data-id="0"> Terms of Use </span>and<span data-id="1"> Privacy Policy </span>of this site.</p>

这段html标签写为:

<div class="terms" @click="popup($event)" v-html="langs.REGISTER_FOOTER"></div>

事件处理:

popup (event) {
 let id = event.target.getAttribute('data-id')
 if(id === '0') {
  console.log('Terms of Use')
 }
 if(id === '1') {
  console.log('Privacy Policy')
 }
}

只有一个点击范围的可以直接使用<span>标签,通过event.target.nodeName来判断

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法

    使用 Hbuilder新建好移动app项目后,mainfest.json这个文件里的 plus里设置 statusbar ..... "plus": { "statusbar": { "immersed": true }, ...... }, ..... 效果 总结 以上所述是小编给大家介绍的vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大

  • 初试vue-cli使用HBuilderx打包app的坑

    微信授权登录提示code-2 appid和appsecret应该是移动应用,而非网页应用 微信授权登录提示code:-100/自定义基座无法微信登录和分享 开发者账号配置的应用签名应该是md5加密后的值,而不是原字符串 生产环境proxyTable不生效,导致接口500 两种解决办法: ①入口文件使用网络地址,且和接口在同一域名下 ②(推荐) 入口文件依旧是index.html 在config/prod.env和config/dev.env下添加API_ROOT 'use strict' mod

  • vue cli构建的项目中请求代理与项目打包问题

    在上篇文章给大家介绍了vue-cli webpack模板项目搭建及打包时路径问题的解决方法,可以点击查看. vue-cli构建的项目中,生产模式下的打包路径.与生产模式下的请求代理简单示意 总结 以上所述是小编给大家介绍的vue cli构建的项目中请求代理与项目打包问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 您可能感兴趣的文章: Vue-cli创建项目从单页面到多页面的方法 Vue使用vue-cli创建项目 vue-cli项

  • vue-cli或vue项目利用HBuilder打包成移动端app操作

    一.测试项目是否可以正确运行 指令:npm run dev 1.首先我们先建立一个vue的项目,本人用的是vue-cli随便建立的,然后运行项目 二.修改路径 (assetsPublicPath: './') 1. 打开我们config中的js文件,修改assetsPublicPath的路径为"./"(下图的右下角位置) 2. 检查下assetsRoot: path.resolve(__dirname, '-/dist'), assetsSubDirectory: 'static',

  • vue cli 3.0通用打包配置代码,不分一二级目录

    1.项目根目录下新建vue.config.js,进行如下配置即可 module.exports={ publicPath:'', }; 补充知识:Vue-CLI3.0更改打包配置 在实际项目开发中,我们一般会直接使用vue.vue-cli来搭建项目.vue框架的宗旨就是让初学者轻松上手,所以,对于打包配置的一些东西,vue的脚手架已经帮我们做好了完美的封装,让我们达到安装既用的效果,也不用担心太多不会做打包配置的问题. 在前期使用Vue-CLI2.0搭建项目时,我们可以在build目录下,直接修

  • 浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑

    1.打包项目 期间遇到的坑,提前说下,避免重复工作. 1.1打包的app出现白屏. 出现原因:路径不对,需要改config\index.js 解决办法:修改打包的路径. 1.2点击页面跳转不了,报 Loading chunk 2 failed. 等错误. 出现原因:不能用history配置路由,要用hash 解决办法:修改路由mode属性为hash. 1.3.点手机物理按钮,直接退出程序. 出现原因:无理返回键直接用监听不到路由,会直接退出程序. 解决办法:可以引入mui,就能正常使用了. 1.

  • 基于vue cli重构多页面脚手架过程详解

    官方提供的项目生成工具vue-cli没有对多页面webApp的支持,但是在实际的项目中,我们需要这样的脚手架,参考了很多大牛的方法,这里提供了一种我的单页面脚手架转换为多页面脚手架的方案,供大家参考.不好的地方也请大家指正. 准备 使用vue-cli生成一个你需要的单页面项目脚手架,然后我们就要开始我们的改装工程了. 重构过程 步骤一 改变目录结构 step1 在src目录下面新建views文件夹,然后再views文件夹下新建index文件夹 step2 将src目录下的main.js和App.

  • vue cli 3.x 项目部署到 github pages的方法

    github pages 是 github 免费为用户提供的服务,写博客,或者部署一些纯静态项目. 最近将 vue cli 3.x 初始化项目部署到 github pages,踩了一些坑,记录如下. https://github.com/nusr/resume-vue 1. vue-router 不要开启 history 模式 路径中的 # 比较丑,就开启了 vue-router 的 history 模式,去掉了 #.平时做项目也是默认开启 history 模式.折腾了半天发现,我这是部署到 g

  • 一篇文章,教你学会Vue CLI 插件开发

    前言 如果你正在使用Vue框架,那么你肯定知道Vue CLI是什么.Vue-cli 3,它是Vue.js 开发的标准工具(脚手架),提供项目支架和原型设计. 除了日常构建打包项目,Vue CLI3 的一个重要部分是cli-plugins,插件开发. 本文将教你如何科学的创建一个Vue-CLI 插件,以及项目独立npm包. 1. 什么是CLI plugin 它可以修改内部webpack配置并将命令注入到vue-cli-service.一个很好的例子是@vue/cli-plugin-typescri

  • 使用 Vue cli 3.0 构建自定义组件库的方法

    本文旨在给大家提供一种构建一个完整 UI 库脚手架的思路:包括如何快速并优雅地构建UI库的主页.如何托管主页.如何编写脚本提升自己的开发效率.如何生成 CHANGELOG 等 前言 主流的开源 UI 库代码结构主要分为三大部分: 组件库本身的代码:这部分代码会发布到 npm 上 预览示例和查看文档的网站代码:类似 Vant.ElementUI 这类网站. 配置文件和脚本文件:用于打包和发布等等 编写此博文的灵感 UI 框架库( vue-cards ),PS:此 UI框架库相对于Vant.Elem

随机推荐