溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

web網(wǎng)頁與小程序間如何進行通信

發(fā)布時間:2021-12-07 10:10:34 來源:億速云 閱讀:493 作者:iii 欄目:移動開發(fā)

本篇內(nèi)容介紹了“web網(wǎng)頁與小程序間如何進行通信”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

我們的微信小程序采用的web-view的方式內(nèi)嵌H5項目,從而減少開發(fā)量,在實際只用中會遇到網(wǎng)頁與小程序通信的功能需要,下面我簡單總結(jié)了我遇到的問題以及解決方案。

小程序提供的功能

微信提供了網(wǎng)頁向小程序發(fā)送消息的方法:wx.miniProgram.postMessage,該方法向小程序發(fā)送消息,會在特定時機(小程序后退、組件銷毀、分享)觸發(fā)組件的message事件。

簡單介紹一下如果使用,以分享為例,如果頁面A需要特別設(shè)置分享內(nèi)容,比如轉(zhuǎn)發(fā)標(biāo)題、縮略圖等??梢栽倬W(wǎng)頁中設(shè)置好變量值,通過發(fā)送給小程序

網(wǎng)頁

let shareData = {
  path: '轉(zhuǎn)發(fā)路徑',
  title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
  imageUrl: '縮略圖url',
};
wx.miniProgram.postMessage({ data: JSON.stringify(shareData) });

小程序

index.wxml

通過bindmessage綁定接收事件

<web-view bindmessage='getMessage' src='{{ src }}'></web-view>

index.js

// 獲取從網(wǎng)頁發(fā)送來的消息
getMessage(e) {
  const getMessage (e) {
  // data是多次postMessage的參數(shù)組成的數(shù)組
  const { data } = e.detail;
  // 需要取最后一條數(shù)據(jù)
  let shareMessage = data[data.length - 1];
  this.shareMessage = JSON.parse(shareMessage);
};

// 設(shè)置分享
onShareAppMessage(options) {
  return {
    title: this.shareMessage.title,
    path:  this.shareMessage.path,
    imageUrl: this.shareMessage.imageUrl,
  };
}

這樣一次定制化分享功能就完成了,但是postMessage方法只有特定場景可以獲取消息,所以如果非特定場景怎么獲取通信呢?

一種簡單的獲取通信的方法

我提供的解決方案可能不是最優(yōu)的也不是最通用的,但是如果遇到了問題時可以作為一個備選方案。

1、場景還原

我們的小程序中有城市定位,第一次進入小程序需要選擇所在城市,選擇城市之后會緩存到本地,之后再次進入小程序不再需要重選選擇城市。功能如下截圖

web網(wǎng)頁與小程序間如何進行通信

選擇城市之后會在首頁右上角展示

web網(wǎng)頁與小程序間如何進行通信

由于城市選擇頁面和首頁都是通過web-view內(nèi)嵌小程序的方式,所以顯然在H5頁面中進入緩存,在小程序中是無法獲取到緩存信息的。

2、解決方案

解決方案很簡單,我跟后端的同伴溝通后,拜托他提供給我一個接口,把城市id和用戶信息關(guān)聯(lián)起來,這樣我就可以再用戶進行小程序的時候獲取用戶上次選擇的城市id,進而再小程序里面緩存處理,這樣用戶再次進入小程序的時候無需再次選擇城市

網(wǎng)頁

// 保存城市信息
const saveCityHandle = () => {
  saveCity({
    cityId: cityId,
    userId: userId,
  }).then(() => {});
};

小程序

獲取城市id之后通過wx.setStorageSync緩存下來,以便后續(xù)使用。

wx.login({
  success(res) {
    if (res.code) {
      wx.request({
        url: `${that.domain()}/getUserInfo`,
        data: {
          body: { jsCode: res.code },
        },
        success(res) {
          wx.setStorageSync('cityId', res.data.cityId);
        },
      });
    } else {
      console.log('登錄失??!' + res.errMsg);
    }
  },
});

總結(jié)

“溫故而知新,可以為師矣?!?/p>

有時候回過頭來看看某些知識點,也許就會有新的思路,與君共勉。ヾ(?°?°?)??

一首小詩

看了一眼日期,發(fā)現(xiàn)12月,2021年最后一個月了,我之前寫過了一首小詩,有點符合我現(xiàn)在的心境,也有一些祝福送給自己也送給大家。

眼前是一扇窗,
窗外是變換的景色,
夜晚,
墨綠的樹,
散落燈光的高樓大廈,
疾馳的汽車,
或匆忙或悠閑的行人。

我好像記住了每一座樓宇,
卻不記得每一張面孔,
不變的建筑,
變換的路人。
今年,
有一些變化,
每一顆追求人生的心,
都值得期待,
每一個不舍的眼神,
笑容也無法遮掩。

致,
所有開發(fā)的伙伴,
一期一祈,
勿懷猶也,
幸福美好。

“web網(wǎng)頁與小程序間如何進行通信”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI