永利爆大奖安全网址-永利爆大奖线路检测中心

【永利爆大奖安全网址,永利爆大奖线路检测中心】,欢迎来到【LG】娱乐中心,玩你所玩,看你所看,澳门皇冠,太阳集团,澳门太阳赌城,永利402,55402com永利,永利402com,澳门十大赌场,手机网投平台,赌博app官网,永利官网,永利国际,永利皇宫,永利注册,金沙城,金沙官网奥门金沙网址,4166am金沙,我们是一家正规的网上官方平台,自创建以来,以其稳定、安全、快捷和良好的信誉得到了各界同仁的一致认可和好评。期待您的到来!

网页程序迁移至Wechat小程序web,小程序开采

日期:2019-11-26编辑作者:前端技术

网页程序迁移至微信小程序web-view详解

2018/08/02 · JavaScript · 小程序

初藳出处: NeoPasser   

小程序将来更进一竿流行,然则商家的无数品种都以用网页写的,小程序语法不宽容原生网页,使得旧有项目搬迁至小程序代价相当高。

小程序早先开放了webview成效,能够说是网页应用的一大福音了,可是微信的webview有生机勃勃部分坑,那篇小说正是列举一下本身在支付进程中遇见的有些标题以致作者找到的有些缓慢解决方案。

js引入:

遇上的难题

  1. openid登陆难题
  2. webview动态src
  3. 支出功用
  4. 享用作用
  5. 环视普通二维码跳转特定页面
  6. 回来按键缺失难题

const util =require('../../utils/util.js')

openid登入问题

Wechatwebview的采取办法很简短,只要如下设置src就能够显示具体的网站了。

<!-- wxml --> <!-- 指向Wechat群众平台首页的web-view --> <web-view src=";

1
2
3
<!-- wxml -->
<!-- 指向微信公众平台首页的web-view -->
<web-view src="https://mp.weixin.qq.com/"></web-view>

Wechat情状里的浩大网页都是用页面要兑现网址的记名成效,只要把登陆的新闻,比如openid大概其余音讯拼接到src里就好了。

此间有个难点,民众号的账号连串平时是以openid来推断唯生机勃勃性的,小程序是足以获取openid的,可是小程序的openid和原民众号之类的openid是不均等的,要求将原先的openid账号体系晋级为unionid账号连串。

以下是Wechat对unionid的牵线

赢得客商宗旨新闻(UnionID机制)

在关切者与大伙儿号发出音讯交互作用后,群众号可得到关切者的OpenID(加密后的Wechat号,每一个客户对各类公众号的OpenID是有一无二的。对于分化大伙儿号,同意气风发客商的openid不一样卡塔尔。大伙儿号可由此本接口来依据OpenID获取客商基本音讯,包涵小名、头像、性别、所在城市、语言和关注时间。

请留意,假设开辟者有在多少个公众号,或在大伙儿号、移动应用之间联合客商帐号的需求,需求前往Wechat开放平台(open.weixin.qq.com卡塔 尔(英语:State of Qatar)绑定民众号后,才可采取UnionID机制来满意上述供给。

UnionID机制表明:

开采者可因此OpenID来得到客商大旨音讯。非常须要注意的是,假使开采者具备八个活动采纳、网址使用和公众帐号,可透过得到客商中央音信中的unionid来不同客商的唯意气风发性,因为假诺是同一个Wechat开放平台帐号下的位移接收、网址选取和大众帐号,客商的unionid是并世无两的。换句话说,同生机勃勃顾客,对同叁个Wechat开放平台下的两样选择,unionid是均等的。

做完以上步骤,就足以调用小程序api wx.getUserInfo() 来获得客户音讯了,此步骤需求开展后台音信解密进度,在这里就不再赘言,结合小程序api文档操作就好。

获得到unioid之后,将unionid新闻拼接到src就足以进行网页登入操作了(前提是网页能够用跳转链接的不二等秘书技登陆,形似民众号页面得到openid的样式)。

赢得全局对象和措施:

webview动态src

Wechat的webview有个坑的地点,不会动态的监听src的转移,那就形成了一个难点,要透过转移src完毕页面跳转就不得以了。
本身尝试了风姿洒脱部分办法之后,找到了叁个消除方案:

Wechatwebview在页面load的时候会加载叁遍webview,我们就使用那些特点来贯彻动态src难点。

  1. 率先把要跳转的链接消息设置成全局变量,要改换src的时候,先把要src以’?‘拆分为链接和参数两部分,存入全局函数,再调用onLoad就能够实现webview刷新了。
  2. 页面跳转时,大家也亟需src的动态刷新,所以要把链接消息存入全局函数;页面跳转时,onShow函数会被调用,这个时候再调用一回onLoad就足以了。

data: { url: '', loaded: false } // 小程序js里的onLoad函数能够写成这么 onLoad: function () { this.setData({ url: getApp().globalData.urlToken + '?' + getApp().globalData.urlData }) }, changUrl: function () { getApp().globalData.urlToken = '' getApp().globalData.urlToken = 'a=1&b=2' // 直接调用onLoad,就能够兑现src的刷新 this.onLoad() }, onShow: function () { if (!this.data.loaded) { // 首次不运转 this.setData({ loaded: true }) return } // 直接调用onLoad,就能兑现src的刷新 this.onLoad() } // wxml可以写成那样 <web-view src="{{url}}"></web-view>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
data: {
    url: '',
    loaded: false
}
// 小程序js里的onLoad函数可以写成这样
onLoad: function () {
    this.setData({
      url: getApp().globalData.urlToken + '?' +  getApp().globalData.urlData
    })
},
changUrl: function () {
    getApp().globalData.urlToken = 'https://www.example.com'
    getApp().globalData.urlToken = 'a=1&b=2'
    // 直接调用onLoad,就会实现src的刷新
    this.onLoad()
},
onShow: function () {
    if (!this.data.loaded) {
      // 第一次不运行
      this.setData({
        loaded: true
      })
      return
    }
    // 直接调用onLoad,就会实现src的刷新
    this.onLoad()
  }
 
// wxml可以写成这样
<web-view src="{{url}}"></web-view>

const app = getApp()

支出效率

webview里面能够经过jssdk来贯彻部分小程序功效,但不可能直接调用小程序的开销效率,此时大家就要求转移一下方针了:

  1. 在网页里引进微信jssdk
  2. 在网页须求倡导支付的地点,调用跳转页面包车型大巴接口,调节小程序跳转到小程序的开垦页面(那个要在小程序里独自写的卡塔 尔(英语:State of Qatar),跳转的时候,须求把订单的局地新闻都凑合到链接里,订单新闻由后台重临,须求经过Wechat支付连串的统一下单接口,具体参看支付文书档案。
  3. 跳转到小程序开采页面后,由小程序页面发起支付,支付到位后跳转回webview页面,通过事先设置的动态src,调整webview跳转到特定的页面。

JavaScript

// 网页引进jssdk // 网页发起支付 wx.miniProgram.navigateTo({ // payData由后台重回,重如果急需联合下单平台的prepay_id url: '../pay/index?data=' + encodeUPRADOIComponent(JSON.stringify(payData)) }) // Wechat支付页面 onLoad: function (option) { let page = this try { let data = JSON.parse(option.data) if (!data || !data.prepay_id) { console.error('支付参数错误,请稍后重试', data) } wx.requestPayment({ timeStamp: '' + data.timestamp, nonceStr: data.nonceStr, package: 'prepay_id=' + data.prepay_id, paySign: data.paySign, signType: data.signType, success: function (res) { getApp().globalData.urlToken = `paySuccess.html` // 支付成功 getApp().globalData.urlData = 'data=paySuccessData' wx.navigateTo({ url: '/page/home/index', }) }, fail: function (res) { getApp().globalData.urlToken = `payError.html` // 支付失利 getApp().globalData.urlData = 'data=payErrorData' wx.navigateTo({ url: '/page/home/index', }) }, complete: function (res) { } }) } catch (e) { console.error('支付错误', e) } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 网页引入jssdk
 
// 网页发起支付
wx.miniProgram.navigateTo({
    // payData由后台返回,主要是需要统一下单平台的prepay_id
    url: '../pay/index?data=' + encodeURIComponent(JSON.stringify(payData))
})
// 微信支付页面
onLoad: function (option) {
    let page = this
    try {
      let data = JSON.parse(option.data)
      if (!data || !data.prepay_id) {
        console.error('支付参数错误,请稍后重试', data)
      }
      wx.requestPayment({
        timeStamp: '' + data.timestamp,
        nonceStr: data.nonceStr,
        package: 'prepay_id=' + data.prepay_id,
        paySign: data.paySign,
        signType: data.signType,
        success: function (res) {
          getApp().globalData.urlToken = `paySuccess.html`
          // 支付成功
          getApp().globalData.urlData = 'data=paySuccessData'
          wx.navigateTo({
            url: '/page/home/index',
          })
        },
        fail: function (res) {
          getApp().globalData.urlToken = `payError.html`
          // 支付失败
          getApp().globalData.urlData = 'data=payErrorData'
          wx.navigateTo({
            url: '/page/home/index',
          })
        },
        complete: function (res) {
        }
      })
    } catch (e) {
      console.error('支付错误', e)
    }
  }

事件:

分享成效

小程序直接分享的webview所在的页面,假设急需丰硕页面参数,那我们就须求管理一下了。

  1. webview内是无法直接发起分享的,必要先用wx.miniProgram.postMessage接口,把须要分享的音讯,推送给小程序;推送给小程序的新闻不是实时处理的,而是顾客点击了享受按键之后,小程序才回去读取的,那将必要每一种必要分享的页面再步入的时候就提倡wx.miniProgram.postMessage推送分享音信给小程序。
  2. 小程序页面通过bindmessage绑定的函数读取post音信,共享的新闻会是四个列表,大家取最后二个分享就好,把分享音信管理好,存到data里面以便下一步onShareAppMessage调用。
  3. 顾客点击分享时,会触发onShareAppMessage函数,在里面安装好相应的享受音信就好了。
  4. onload函数有一个option参数的,能够读取页面加载时url里带的参数,那个时候要对本来的onload函数实行改动,实现从option里读取链接音信。

JavaScript

// 网页wx.miniProgram.postMessage wx.miniProgram.postMessage({ data: { link: shareInfo.link, title: shareInfo.title, imgUrl: shareInfo.imgUrl, desc: shareInfo.desc } }) // 小程序index wxml设置 <web-view src="{{url}}" bindmessage="bindGetMsg"></web-view> // 小程序index js bindGetMsg: function (e) { if (!e.detail) { return } let list = e.detail.data if (!list || list.length === 0) { return } let info = list[list.length - 1] if (!info.link) { console.error('分享音信错误', list) return } let tokens = info.link.split('?') this.setData({ shareInfo: { title: info.title, imageUrl: info.imgUrl, path: `/page/index/index?urlData=${encodeURIComponent(tokens[1])}&urlToken=${tokens[0]}` } }) }, onShareAppMessage: function (res) { if (res.from === 'button') { // 来自页面内转载开关 console.log(res.target) } let that = this return { title: that.data.shareInfo.title, path: that.data.shareInfo.path, imageUrl: that.data.shareInfo.imageUrl, success: function (res) { // 转发成功 }, fail: function (res) { // 转载战败 } } }, onLoad: function (option) { if (option.urlToken) { getApp().globalData.urlToken = option.urlToken } if (option.urlData) { getApp().globalData.urlData = option.urlData } this.setData({ url: getApp().globalData.urlToken + '?'

  • getApp().globalData.urlData }) },
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 网页wx.miniProgram.postMessage
wx.miniProgram.postMessage({
  data: {
    link: shareInfo.link,
    title: shareInfo.title,
    imgUrl: shareInfo.imgUrl,
    desc: shareInfo.desc
  }
})
// 小程序index wxml设置
<web-view src="{{url}}" bindmessage="bindGetMsg"></web-view>
// 小程序index js
bindGetMsg: function (e) {
    if (!e.detail) {
      return
    }
    let list = e.detail.data
    if (!list || list.length === 0) {
      return
    }
    let info = list[list.length - 1]
    if (!info.link) {
      console.error('分享信息错误', list)
      return
    }
    let tokens = info.link.split('?')
    this.setData({
      shareInfo: {
        title: info.title,
        imageUrl: info.imgUrl,
        path: `/page/index/index?urlData=${encodeURIComponent(tokens[1])}&urlToken=${tokens[0]}`
      }
    })
},
onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 来自页面内转发按钮
      console.log(res.target)
    }
    let that = this
    return {
      title: that.data.shareInfo.title,
      path: that.data.shareInfo.path,
      imageUrl: that.data.shareInfo.imageUrl,
      success: function (res) {
        // 转发成功
      },
      fail: function (res) {
        // 转发失败
      }
    }
},
onLoad: function (option) {
    if (option.urlToken) {
      getApp().globalData.urlToken = option.urlToken
    }
    if (option.urlData) {
      getApp().globalData.urlData = option.urlData
    }
    this.setData({
      url: getApp().globalData.urlToken + '?' +  getApp().globalData.urlData
    })
},

1、key 以bind或catch初阶,然后跟上事件的类型,如bindtap、catchtouchstart。

举目四望普通二维码跳转特定页面

除却享受功效之外,小程序还足以因而配备,达成扫描普通二维码跳转特定页面包车型客车作用。

以下是Wechat对此意义的牵线

为了便于小程序开辟者更便利地拓展小程序,宽容线下已部分二维码,微信公众平台开放扫描普通链接二维码跳转小程序工夫。

成效介绍

经常说来链接二维码,是指开垦者使用工具对网页链接实行编码后生成的二维码。

线下商家可不需改变线下二维码,在小程序后台达成布局后,就可以在客户扫描普通链接二维码时展开小程序,使用小程序的功能。
对此普通链接二维码,这几天支持使用Wechat“扫一扫”或微信内长按识别二维码跳转小程序.

二维码准则

据他们说二维码跳转法规,开荒者须要填写供给跳转小程序的二维码准绳。必要如下:

  1. 二维码准绳的域名须通过ICP备案的表达。
  2. 协理http、https、ftp最早的链接(如:、)。
  3. 多个小程序帐号可配备相当少于13个二维码前缀法规。

前缀占用准绳

开拓者可筛选是不是占用切合二维码相配法规的全部子法规。如采取占用,则此外帐号不可申请使用满意该前缀相称准则的其它子法则。

如:若开采者A配置二维码准绳:,并接收“占用全体子准则“,其余开辟者将不得以安排知足前缀相配的何穗则如。

自己推荐的方法

webview完成情势

  1. 安装跳转效用小程序后台就足以设置,链接是分为四部分,路https://www.example.com/wxmin…。

    https://www.example.com 域名
    /wxmini/ 小程序前置规则,需要在服务器上建一个文件夹,并且把验证文件放在文件夹线
    home.html 需要跳转的网页页面
    a=1 跳转页面的参数
  2. 对onload函数再实行管理,达成平时二维码跳转。

JavaScript

// 对index onLoad在张开始拍片卖 onLoad: function (option) { this.resetOption(option) if (option.urlToken) { getApp().globalData.urlToken = option.urlToken } if (option.urlData) { getApp().globalData.urlData = option.urlData } this.setData({ url: getApp().globalData.urlToken + '?' + getApp().globalData.urlData }) }, resetOption: function (option) { if (!option) { return } if (option.q) { option.q = decodeURIComponent(option.q) if (option.q.indexOf('') == -1) { return } let tmp = option.q.replace('/wxmini', '') let tmps = tmp.split('?') option.urlToken = tmps[0] option.urlData = tmps[1] } else { option.urlData = decodeURIComponent(option.urlData) } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 对index onLoad在进行处理
onLoad: function (option) {
    this.resetOption(option)
    if (option.urlToken) {
      getApp().globalData.urlToken = option.urlToken
    }
    if (option.urlData) {
      getApp().globalData.urlData = option.urlData
    }
    this.setData({
      url: getApp().globalData.urlToken + '?' +  getApp().globalData.urlData
    })
},
resetOption: function (option) {
    if (!option) {
      return
    }
    if (option.q) {
      option.q = decodeURIComponent(option.q)
      if (option.q.indexOf('https://www.example.com/wxmini/') == -1) {
        return
      }
      let tmp = option.q.replace('/wxmini', '')
      let tmps = tmp.split('?')
      option.urlToken = tmps[0]
      option.urlData = tmps[1]
    } else {
      option.urlData = decodeURIComponent(option.urlData)
    }
}

跳转:

再次回到开关缺点和失误难题

万大器晚成web页面是在第三个页面包车型地铁话,那时候会有一个主题素材,小程序的归来开关就没有了,webview无法使用Wechat的回来按键了,这个时候只要在webview页前面多加二个跳转页面就好了(第贰个页面也能够设置成获取客商权限的页面,然而本身备感那样心得不佳,亦不是装有页面都要客商拿到了权力才足以动用卡塔 尔(阿拉伯语:قطر‎

提及底的页面层级

JavaScript

"pages": [ "page/index/index", // 首页,处理onload里的option内容,为了重返开关设置的 "page/home/index", // webview所在的页面 "page/auth/index", // 获取客户权限的页面 "page/pay/index", // 支付页面 "page/error/index" // 错误信息页面 ],

1
2
3
4
5
6
7
"pages": [
    "page/index/index", // 首页,处理onload里的option内容,为了返回按钮设置的
    "page/home/index", // webview所在的页面
    "page/auth/index", // 获取用户权限的页面
    "page/pay/index", // 支付页面
    "page/error/index" // 错误信息页面
  ],

页面和tabBar之间跳转:

仿照效法链接

  1. webview文档
  2. 小程序unionid介绍
  3. unionid得到格局

    2 赞 2 收藏 评论

图片 1

wx.switchTab({

url:'../index/index'

});

页面之间跳转方法:

1、保留当前页面,跳转到应用内的有个别页面,使用wx.navigateBack可以回来到原页面。

wx.navigateTo({   新页面会有重回开关

url:'../logs/logs?key=value&key2=value2' //传参

,

success: function(res){

// success

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

2、wx.redirectTo(OBJECT)

关门当前页面,跳转到应用内的某部页面。

wx.redirectTo({   新页面不会有重返按键

url:'../index/index',

,

success: function(res){

// success

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

3、x.navigateBack(OBJECT)

关闭当前页面,重返上意气风发页面或体系页面。可因而 getCurrentPages()) 获取当前的页面栈,决定需要再次来到几层。若是 delta 大于现成页面数,则赶回到首页。

varpages = getCurrentPages()varnum = pages.length

navigateBack:function(){wx.navigateBack({

delta: num

})

}

页面跳转也可直接用 url:

<navigator url="../login/login?title=1111" >跳转到新页面</navigator>

<navigator url="../login/login?title=111" redirect>在当前页展开新页面</navigator>

假设要传 数组, 字典等复杂类型, 要先用 JSON.stringify() 转成字符串然后传递,采取到以往要用JSON.parse(卡塔 尔(英语:State of Qatar)转变。.

取参:

Page({

onLoad:function(options) {

this.setData({       //用于给data中的变量赋值

title: options.key

})

}

})

数据绑定:

数码绑定使用 Mustache 语法(双大括号卡塔尔将变量包起来。

内容:<view>{{message}}</view>

决定属性:<view wx:if="{{condition}}"></view>

关键字:<checkbox checked="{{false}}"></checkbox>

...

http:(Wechat群众号和小程序上线的话都不得不是https必要,小程序接口不允许ip和端口号)

wx.request({ 

 url:'test.php',//仅为示范,并非真实的接口地址

data: { x:'', y:''},

 header: {'content-type':'application/json、默认值、或者、、'application/x-www-form-urlencoded'// }, 

method:'GET/POST',

 success:function(res){console.log(res.data) }

})

APP.JSON(tabBar)

{

"pages":[

"pages/index/index",

"pages/tucao/tucao",

"pages/center/center"

],

"window":{

"backgroundTextStyle":"",

"navigationBarBackgroundColor":"red",

"navigationBarTitleText":"一个标题而已",

"navigationBarTextStyle":"white"

},

"tabBar": {

"list": [{

"pagePath":"pages/index/index",

"text":"首页",

"iconPath":"public/menu-cd.png",

"selectedIconPath":"public/menu.png"

},{

"pagePath":"pages/tucao/tucao",

"text":"吐槽",

"iconPath":"public/hot-cd.png",

"selectedIconPath":"public/hot.png"

},{

"pagePath":"pages/center/center",

"text":"我的",

"iconPath":"public/center-cd.png",

"selectedIconPath":"public/center.png"

}],

"borderStyle":"white"

}

}

本文由永利爆大奖安全网址发布于前端技术,转载请注明出处:网页程序迁移至Wechat小程序web,小程序开采

关键词:

英国卫报的个性离线页面是这样做的

Service Worker初体验 2016/01/06 · JavaScript· Service Worker 原稿出处: AlloyTeam    在二零一五年,W3C公布了service worker的草案...

详细>>

离线网页应用,入门教程

接纳 Service Worker 做一个 PWA 离线网页应用 2017/10/09 · JavaScript· PWA, ServiceWorker 原版的书文出处:人人网FED博客    在...

详细>>

United Kingdom卫报的秉性离线页面是如此做的

Service Worker入门 2015/03/26 · JavaScript· Service Worker 原文出处: MattGaunt   译文出处:[w3ctech 十年踪迹]()    原生App拥有...

详细>>

前端工程之模块化,我们是如何做好前端工程化

小编们是什么做好前端工程化和静态财富管理 2016/07/30 · 幼功技艺 ·工程化,静态能源 原稿出处:坑坑洼洼实验室  ...

详细>>