小程序web-view填坑

前言

小程序新出了web-view,正好有一個需求需要做頁面跳轉(zhuǎn),在此記錄下過程中發(fā)現(xiàn)的填坑

白名單設(shè)置

白名單是設(shè)置二級域名的,也就是也就說,如果訪問的是https://agt.yugi.com下面的地址,就要設(shè)置https://agt.yugi.com,而不是https://www.yugi.com,并且這個設(shè)置,因此,針對小程序的頁面,盡量不要做二級域名,避免設(shè)置不過來。而且這個設(shè)置似乎不是馬上生效的,所以一開始一直提示域名非法。

帶參數(shù)跳轉(zhuǎn)

因為考慮還會有其他的頁面跳轉(zhuǎn), 就直接做了一個web的頁面,帶入url即可,然后實際操作中,發(fā)現(xiàn)一直白屏,通過數(shù)據(jù)分析,發(fā)現(xiàn)是URL的參數(shù)丟失了。
通過調(diào)查,發(fā)現(xiàn)是我的參數(shù)中含有的一些參數(shù)在微信傳參中會丟失,需要在跳轉(zhuǎn)前將參數(shù)轉(zhuǎn)義,使用前在重新轉(zhuǎn)義回去。

傳參

toUrl(event) {
    // 打開頁面(只能打開白名單的域名)
    var url = event.target.dataset.url;
    if(!url){
      return;
    }
    url = encodeURIComponent(url);
    url = '/pages/web/web?url=' + url;
    wx.navigateTo({
      url: url
    })
  }

收參

onLoad: function (options) {
    // 頁面渲染后 執(zhí)行
    var page = this;
    var url = options.url;
    url = decodeURIComponent(url);
    
    // 頁面初始化 options為頁面
    var newUrl = "https://www.yugi.com";
    if (url.indexOf('http://yugi.com')>-1){
      url = url.replace('http://yugi.com', newUrl);
    } else if (url.indexOf('http://www.yugi.com')>-1) {
      url = url.replace('http://www.yugi.com', newUrl);
    }
    //isPassArea=1&xcx=1
    if (url.indexOf('isPassArea')<0) {
      url = url +'&isPassArea=1';// 二級域名不過濾
    }
    if (url.indexOf('xcx') < 0) {
      url = url + '&xcx=1';// 小程序標(biāo)識,如果有需要特殊處理,可以用此判斷
    }
    if (url.indexOf('flag=1') < 0) {
      url = url.replace('flag=1','flag=2');
    }
    if (url.indexOf('flag') < 0) {
      url = url + '&flag=2';// 取消一鍵下載
    }
    // 頁面初始化 options為頁面跳轉(zhuǎn)所帶來的參數(shù)
    this.setData({
      url: url
    }) 
  }

分享

微信不能分享網(wǎng)頁,所以,依然是分享這個微信小程序頁面,this.data.url在上文中的onload已經(jīng)設(shè)置好了。頁面標(biāo)題暫時沒有看到API可以獲取,所以略過。

onShareAppMessage(options) {
    var url = this.data.url;
    url = encodeURIComponent(url);
    url = '/pages/web/web?url=' + url;
    // console.log(url);
    return {
      title: 'yugi',
      desc: '',
      path: url
    }
  }

一下列出幾個較為完整的代碼,便于下次閱讀修改

web.js

// pages/web/web.js
Page({
  data: { // 參與頁面渲染的數(shù)據(jù)
    url: ''
  },
  onShareAppMessage(options) {
    var url = this.data.url;
    url = encodeURIComponent(url);
    url = '/pages/web/web?url=' + url;
    return {
      title: 'title',
      desc: '',
      path: url
    }
  },
  onLoad: function (options) {
    // 頁面渲染后 執(zhí)行
    var page = this;
    var url = options.url;
    url = decodeURIComponent(url);
    
    // 頁面初始化 options為頁面
    var newUrl = "https://www.yugi.com";
    if (url.indexOf('http://yugi.com')>-1){
      url = url.replace('http://yugi.com', newUrl);
    } else if (url.indexOf('http://www.yugi.com')>-1) {
      url = url.replace('http://www.yugi.com', newUrl);
    }
    // 頁面初始化 options為頁面跳轉(zhuǎn)所帶來的參數(shù)
    this.setData({
      url: url
    }) 
  }
})

web.wxml

<web-view src="{{url}}"></web-view>  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容