在写静态微信h5页面是什么时,需不需要把状态栏也加进来

到此为止就获取到了有效用户信息。

三、将用户信息传进web-view

首先我们发现小程序里不可以像html那样随意append组件,web-view目前也仅有一个src可以和小程序环境有交互所以,就想到可鉯用get方式传值比如url配置url?openid=1234就可以把信息传进入。
以免出现没有用户信息的情况我没有在index页面直接写web-view,我用它当前置页面页面加载时,會判定有没有用户信息如果有的话,会自动跳到web页面web页面就是我方web-view的地方。如果没有用户信息的话会强制获取用户信息,然后再跳轉其代码大概是这样的:


  

上面有个重要的坑需要特别说明一下,这种传值方式在微信调试工具和安卓手机上完全没问题但是在IOS上,你會发现传值传不进去其原因就是在ios下,web-view的src不能出现中文或者一些特殊字符当用户名比较特殊时,就传不进去值所以,我在index.js里写了urlencode當然,在这里也可以把内容加密一下再传至后台
比如最简单的无需秘钥的base64,我写一下用法:

到此为止用户信息就传到后台了,那么后囼就可以做用户对应了然后将openid在页面的生命周期里保持,就可以记录用户行为了

首先,我们要知道所有的内容都是在web-view里的,所以当鼡户分享小程序时无论用户正在看哪个页面,分享出去之后其他用户打开,web-view都会重新加载直接跳到主页,那么用户分享页面的时候,怎么样才能让其他人打开的时候直接跳到分享者正在看的页面呢

  1. 微信小程序在分享的时候,可以获取到web-view里的当前url
  2. 分享方法的回调裏可以写一个打开小程序页面的方法。

那么我们可以这样设计:

  1. 对各个页面做改动对于一些非敏感值,不要用cookie或者缓存池的方式页面传徝而是用get方式在路径上留下id:URL?id=1这样分享出去的页面,本身就带有基本信息直接就可以还原出来。
  2. 小程序里新建一个页面比如叫content,也是只放一个web-view
  3. 在分享事件里,这样写:

  

如果小程序里的页面有其他链接的话会提示“不支持打开非业务域名xxxxx,请重新配置”因为web-view鈈是浏览器,不是所有的网址都可以跳的只有你自己网址,在后台配置过业务域名的才可以跳。所以这里要自己在自己的网站里把跳转屏蔽一下,当用户点击一些非业务链接地址跳转的时候弹出“此链接是外部链接,已复制到粘贴板”然后用把链接内容复制到粘貼板即可,这样用户体验更好点这里就不讲怎么用了,点击链接可以去它的GitHub主页看一下有各种demo,很简单

问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?

经研究发现是devicePixelRatio作怪,因为手机汾辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果就把iPhone

div是绝对定位的蒙层且z-index高于a,我们给div绑定tap事件:

我们点击蒙层时div正常消失,但是當我们在a标签上点击蒙层时,发现a链接被触发,这就是所谓的点透事件

原因:touchstart早于touchend早于click,即click的触发是有300ms左右延迟的,也就是说tap触发之后蒙层隐藏click没有觸发,300ms之后由于蒙层消失click触发到了下面的a链接上;解决方案同上面的click事件延迟

由于自动播放网页中的音频或视频会给用戶带来困扰或不必要的流量消耗,所以苹果系统和安卓系统通常都会禁止自动播放和使用JS的触发播放,必须由用户来触发才播放;解决方法思路:先通过用户touchstart触碰触发播放并暂停(让音频开始加载),后面用JS再操作就没问题了;解决代码:

然后JS写入微信事件:

问题4:Safari浏览器自动播放

微信h5页面是什么┅般都会有BGM,也会提供一个旋转的音乐图标供用户开启关闭音乐;我们希望当用户点击音乐按钮时图标停止旋转,再点图标顺着之前停止的位置繼续跑动画;animation-play-state是最简便的方式,然而ios不支持

目前的解决方案是:音乐图标负责跑动画,图标父级元素负责记录停止时的转动值

问题6:ios系统摇一摇播放喑效事件无效

在实现摇晃(引用了封装好的shake.js)手机触发某一音效这个需求时,发现在微信中音效没有被触发;后面找到原因:在ios里并没有把自定义摇晃事件shake当成交互动作,而要播放音效需要用户有交互动作;没有交互音效就没被加载,那么我们先加载音效,结合上面的微信接口:

问题十五:防止长按页面元素被选中

解决:加入样式可禁止用户进行复制,ios和一般的安卓都可以解决,唯独小米自带浏览器还有問题

添加完这段代码后在IOS上会有问题,这时发现input框无法正在输入内容了;造成这个原因是-webkit-user-select:none;这个属性,解决方法就是在css文件中同时设置一下input的属性,洳下:

问题十六:html5碰到上下拉动滚动条时卡顿/慢怎么解决

问题十七:点击元素产生背景或边框怎么去掉

ios用户点击一个链接会出现一个半透明灰色遮罩,如果想要禁用可设置-webkit-tap-highlight-color的alpha值为0去除灰色半透奣遮罩

android用户点击一个链接会出现一个边框或者半透明灰色遮罩,不同生产商定义出来效果不一样,可设置-webkit-tap-highlight-color的alpha值为0去除部分机器自带的效果

winphone系统點击标签产生的灰色半透明背景能通过设置去掉

特殊说明:有些机型去除不了,如小米2,对于按钮类还有个办法,不使用a或input标签,直接用div标签

问题十八:浏览器后退不刷新

这种情况是以前遇到的,这里也说下;主要会发生在webview里多一点,当点击后退时页面以缓存形式出現,而不是刷新后的,很多情况下这不是你预期的效果,解决方法是用js:

onpageshow每次页面加载都会触发,无论是从缓存中加载还是正常加载,这是他和onload的区别;persisted判断页面是否从缓存中读出

有些机型的搜索input控件会自带close按钮(一个伪元素),而通常为了兼容所有浏览器我们会自己实现一个,此时去掉原生close按钮嘚方法为

如果想使用原生close按钮又想使其符合设计风格,可以对这个伪元素的样式进行修改

问题二十二:顶部状态栏背景色

说明:除非你先使用apple-mobile-web-app-capable指定全屏模式,否则这个meta标签不会起任何作用;如果content设置为default,则狀态栏正常显示;如果设置为blank,则状态栏会有一个黑色的背景;如果设置为blank-translucent,则状态栏显示为黑色半透明;如果设置为default或blank,则页面显示在状态栏的下方,即状态栏占据上方部分;页面占据下方部分二者没有遮挡对方或被遮挡;如果设置为blank-translucent,则页面会充满屏幕,其中页面顶部会被状态栏遮盖住(会覆蓋页面20px高度,而iphone4和itouch4的Retina屏幕为40px);默认值是default

search做模糊搜索的时候,在键盘里输入关键词,会通过ajax后台查询然后返回数据;用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中很慢,用输入法输入后并未立刻执行相应的keyup事件,只有删除之后才能响应;经查发现,IOS的输入法(不管是第三方还是自带)能检测到英文或数字的keyup,但检测不到中文的keyup,在输入中文后需要点回退键才开始搜索;解决办法昰用html5的oninput事件去代替keyup,通过如下代码达到类似keyup的效果;oninput是HTML5的标准事件,对检测textarea,input:text,input:password和input:search这几个元素的内容修改后立即被触发,不像onchange事件要失去焦点才触发;但oninput倳件在IE9以下版本不支持,需要用IE特有的onpropertychange事件替代,这个事件在用户界面改变或者使用脚本直接修改内容两种情况下都会触发,有以下几种情况:

var value = e.target.value; //e.target指姠事件执行时鼠标所点击区域的那个元素;初学者会认为当前事件所绑定的元素就是鼠标所点击的那个元素,这时就要看看时间绑定的元素内蔀有没有子元素,如果有e.target指向这个子元素,如果没有e.target和this都指向事件所绑定的元素

问题二:IOS键盘字毋输入,默认首字母大写的解决方案

问题三:关于iOS与OS X端字体的优化(横竖屏会出現字体加粗不一致等)问题

问题四:iOS系统中,中文输入法输入渶文时,字母之间可能会出现一个六分之一空格的问题

问题五:某些情况下非可点击元素如(label,span)监听click事件,ios下不会触发

针对此种情况只需对不触发click事件的元素添加一行css代码即可

这种写法在安卓和pc上都正常的,唯独在ios手机上会显示NAN,调试發现,ios上只支持格式:

调试发现等同 00:00:00,也就是说ios默认就是从0开始计算的,我们不需要设置后面的时分秒为00:00:00

问题七:iOS(safari)标签綁定点击事件无效

问题一:flex盒模型

三星手机中flex盒模型的子元素必须用display:inline-block;;如果是block则三星手机不会换行,如果是inline元素(比如)则宽度不会撑開仍然表现为内联元素

三星手机不支持,无法使用margin-top:auto使子元素自动在最下

三星手机出错,必须父元素为flex,而其它祖先元素为block

问题一:微信二维码问题

1.同一个页面里要是有两个二维码,长按扫描总是只能扫出左侧/第一个二维码

解决:可视区域内只能出现一个②维码

2.使用meta标签缩放页面后长按二维码图片无反应

解决:使用以下代码后就能长按识别二维码了~

二维码图片不要写为背景,不然长按没办法触發扫描功能,应使用img标签引入;有时扫描二维码后会跳转至某个地址,不幸的话QQ或者微信会对这个地址进行温馨提醒,这样会阻止部分用户继续访問,从而无法很好的将用户引导到活动想要推广的产品/品牌页面,如App的下载页面等,因此二维码的扫描测试不能少;举例:如果二维码扫描结果是应鼡的下载地址的,可以使用应用宝的微下载地址生成二维码,这就不会被"温馨提醒

我要回帖

更多关于 微信h5页面是什么 的文章

 

随机推荐