本篇文章给大家带来的内容是关于移动端H5开发遇到的问题及解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

微信分享签名错误invalid signature

vue单页应用history模式下微信分享一直提示签名错误invalid signature

按照微信官网文档,已经引入jssdk,正确的配置js安全域名,后台开发人员生成的签名也通过微信签名工具验证,但是前端的自定义分享一直报签名错误,没有办法自定义分享,如果确保了哪些基本配置没有问题,并且签名也通过了微信签名工具验证,那么可能就是前端访问的url和后台生成签名的url不一致导致的签名错误

前端如果是通过ajax将url传到后端获取签名,那么我们需要将当前页面除去'#'hash部分的链接,并且需要encodeURIComponent

1

2

let url = location.href.split('#')[0]

encodeURIComponent(url)

正常来说这样就可以实现微信自定义分享了,但是单页应用路由切换了之后IOS端还是提示签名错误,安卓端没有问题

这是因为history模式下视图是通过pushState来切换的,但是IOS微信客户端(安卓客户端已经修复了)不支持pushState的H5新特性,所以路由变化了但是微信浏览器获取到的url没有变化,右上角复制链接发现,微信记录的url还是第一次进入时的url,除非你手动刷新,或者使用window.location等页面跳转方法刷新,才能获取到最新的url

解决的办法是页面进入的时候记录url,如果是iOS设备那么使用这个url获取微信签名

1

2

3

4

5

6

7

router.afterEach(to => {

  sessionStorage.setItem('currentUrl',window.location.href)

})

let url = encodeURIComponent(location.href.split('#')[0])

if(system == "iOS" && sessionStorage.getItem('currentUrl')) {

  url = encodeURIComponent(sessionStorage.getItem('currentUrl').split('#')[0])

}

这个时候拿这个url去获取微信签名就是正确的了,该方法只适合IOS设备,只要获取签名的url和微信记录的url一致签名就是正确的

往返缓存问题

点击浏览器的前进和回退,有时候不会自动执行js,特别是在safari中,这与往返缓存(bfcache)有关系。
解决方法 :window.onunload = function(){};

如果是Vue单页应用,并且使用了keep-alive的话,页面也不会刷新,这时候一些接口请求等可以放在beforeRouteEnter方法中

IOS端不支持new Date("2019-01-01 00:00:00") 这种格式

这种写法new Date("2019-01-01 00:00:00")在安卓端是支持的,但是在IOS端不支持,会报NAN错误,所以需要把new Date("2019-01-01 00:00:00")改成new Date("2019/01/01 00:00:00")这种形式

1

2

let date = '2019-01-01 00:00:00'

date.replace(/\-/g, '/')

微信二维码

一个页面可能有多个二维码,但是长按识别二维码只能识别最后一个二维码,这个时候我们需要控制页面可视区域内只能出现一个二维码

IOS中无法点击

span,p 等默认无法点击的标签, IOS中监听click事件点击无效
解决办法,添加 cursor: pointer;

audio音频无法播放

audio.play() 方法在安卓设备可以正常播放,但是在IOS客户端不能播放,在设置了audio的src之后,我们需要加上这一行代码
audio.load() 去加载音频

可以通过监听loadeddata方法看音频是否可以开始播放了,安卓设置在音频加载好了之后就开始播放,但是iOS端可能稍微有延迟,这个时候我们可以通过audio.currentTime获取到音频是否开始播放,这个值大于0就说明已经开始播放了

IOS移动端click事件300ms的延迟响应

fixed问题

在ios8以下系统,当小键盘激活时,都会出现位置浮动问题,解决方法:只需要在中间部分外层p添加css样式
position:fixed;top:50px; bottom:50px;overflow:scroll;

移动端H5开发遇到的问题及解决方法的更多相关文章

  1. 移动端H5开发自适应技巧

    移动端H5开发,必要要做到自适应各种分辨率的手机,下面由我为大家大致说一下,需要3步走 第一:head标签中添加: <meta name="viewport" content ...

  2. 内容分享-迅为IMX6开发板编译问题及解决方法

    [经验分享]IMX6开发板编译问题及解决方法本文转自迅为IMX6开发板售后讨论群,分享给大家~ 物理主机 win10 64 位专业版.虚拟机 VM12 Pro.开发环境采用迅为提供的开发环境: Ubu ...

  3. Spring cloud开发内存占用过高解决方法

    https://blog.csdn.net/wanhuiguizong/article/details/79289986 版权声明:本文为博主原创文章,转载请声明文章来源和原文链接. https:// ...

  4. Android通过Chrome Inspect调试WebView的H5 App出现空白页面的解决方法(不需要FQ)

    本文系博主原创,未经许可不得转载.如未经本人同意,私自转载或盗取资源提供下载,本人保留追究其法律责任的权利. 调试基于WebView的Hybrid App最舒服的工具当然是Chrome自带的开发者工具 ...

  5. Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

    当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...

  6. 移动端 h5开发相关内容总结(三)

    之前写过两篇开发中遇到的问题和解决方案.当时是CSS 和 JavaScript 分开写的.现在写这篇文章的时候感觉很多内容都是有内在联系的,所以不好分开. 给大家分享一下这半年来的感受吧: 知道和理解 ...

  7. 转---移动端 h5开发相关内容总结——CSS篇

    作者:伯乐在线专栏作者 - zhiqiang21 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 1.移动端开发视窗口的添加 h5端开发下面这段话是必须配置的 meta ...

  8. 移动端 h5开发相关内容总结——CSS篇

    1.移动端开发视窗体的加入 h5端开发以下这段话是必须配置的 <meta name="viewport" content="width=device-width, ...

  9. 移动端 h5 开发相关内容总结——JavaScript 篇

    1.改变页面标题的内容 有时候我们开发 h5页面的时候须要动态的去更新title 的名字,这个时候使用 document.title='改动后的名字'; 就行解决我们的问题. 或者使用 //当前fir ...

随机推荐

  1. 提升Essay写作说服力,需要注意这几个细节

    很多留学生对于essay写作都不精通,能够勉强通过就不错了.那么Essay写作到底该怎么提分呢?可以从哪些方面入手?小编给同学们指几条路,相信可以帮到大家. 在有说服力的Essay中总结您的论点.尽管 ...

  2. 吴裕雄--天生自然java开发常用类库学习笔记:Iterator接口

    import java.util.List ; import java.util.ArrayList ; import java.util.Iterator ; public class Iterat ...

  3. Good Bye 2019

    A.Card Game 题目大意:两个人都有共有n张卡牌,每张卡牌上都有一个数xi,没有两张牌上的数相同,且xi不小于1不大于n.每次两个人选出一张牌来,牌上数字大的人赢得此局,如果谁最后手上拥有所有 ...

  4. Set Request Header

    第1步 webpack package.json 的 scripts 里的 dev 要新增 --host 0.0.0.0 这样在浏览器里用ip地址代替localhost就能运行了 第2步 在pc浏览器 ...

  5. es6 中的 Promise

    var promise = new Promise( function( resolve, reject ){             function onServiceSuccess( data ...

  6. MongoDB 初始化数据同步

    MongoDB初始化数据同步: 副本集中的成员启动之后,就会检查自身的状态,确定是否可以从某个成员那里进行同步.如果不行的话,尝试从其他成员那里进行完整的数据复制. 这个过程就是初始化同步(initi ...

  7. Oracle SQL触发器

    一.触发器 触发器是一个数据库对象,是一个特殊的过程,当特定的时间发生时隐式地执行.比如在一个表中发生插入.更新或删除的时间,或者 CREATE.ALTER 这样的数据定义语句执行时,触发器会隐式执行 ...

  8. 在 Windows 系统上安装 Jekyll

    目录 安装 Ruby 环境 用 Bundler 安装 Jekyll 本文是写给完全未用过 Ruby 乃至命令行工具者的.对于一般的开发者,Jekyll 官方文档的相关内容已然足够. 本文为钱院学辅技术 ...

  9. python+opencv+dlib瘦脸效果

    对实现人脸瘦脸简单功能的一个记录,大概流程如下: 1.使用dlib检测出人脸关键点 2.使用Interactive Image Warping 局部平移算法实现瘦脸 参考:https://blog.c ...

  10. Windows2008R2安装DNS和SQLServer200r2服务 (9.18第七天)

    原文网址:https://www.cnblogs.com/yankaohaitaiwei/p/11538205.html 二.IIS搭建web服务器 1.格式化D盘,一定要选择NTFS!!!不然后面添 ...