淺析微信小程式和web之間的互動(程式碼分享)

奋力向前
發布: 2021-08-17 12:58:52
轉載
4645 人瀏覽過

之前的文章《深入淺析React Native與Web的基本互動(附程式碼)》中,給大家了解React Native與Web互動。以下這篇文章給大家了解一下微信小程式和web之間的交互,有需要的朋友可以參考一下,希望對你們有幫助。

淺析微信小程式和web之間的互動(程式碼分享)

背景

通常我們寫了一套自適應的web程序,想在多種環境中使用.例如app裡,微信小程式裡,各種app分享中,假如只是能使用app瀏覽,問題不大,但是要在被嵌入app裡面和app本身交互,就要做各種折騰,如是就有了本文。

ReactNative裡折騰,請看這裡

#存取條件

  • 首先得有開發者權限

  • 你得有台伺服器,有權限上傳文件,不然驗證無法通過

  • ##必須是企業小程序,個人和海外小程式無法使用

    web-view元件

  • 你的相關網域配置了有效的證書,並且開啟了

    https#服務

  • 你要存取的網址必須加入了業務網域白名單,網址所呼叫的api介面必須加入了伺服器網域白名單,而

    api介面也使用的https協定

以上條件必須同時滿足,缺一不可微信

JSSDK引入

微信JSSDK 引入

外部引入

 //进一步提升服务稳定性,当上述资源不可访问时,可改访问 
登入後複製

使用AMD/CMD標準模組載入方法載入

安裝

npm i weixin-js-sdk
登入後複製

在mian.js用使用

import wx from 'weixin-js-sdk'
登入後複製

判斷是微信小程式環境

透過

userAgentmicromessenger

##都或

window.__wxjs_environment來判斷

從微信7.0.0 開始,可以透過判斷userAgent包含miniProgram字樣來判斷小程式web-view環境。

import wx from "weixin-js-sdk"; let OS = "PC"; //假设有多种环境 let ua = window.navigator.userAgent.toLowerCase(); if ( ua.indexOf("micromessenger") >= 0 || window.__wxjs_environment === "miniprogram" ) { //在微信或者小程序中 wx.miniProgram.getEnv((res) => { if (res.miniprogram) { //在小程序中 OS = "wxminiprogram"; window.wx = wx; } else { //在微信中 OS = "weixin"; } }); }
登入後複製

引入了

sdk,知道了環境變量,下面就是開乾了。

互動範例小程式端

使用小程式端的元件
,新建

/page/webview/index.wxml

  • web-view會自動鋪滿整個小程式頁面,個人類型與海外類型的小程式暫不支援使用。客戶端6.7.2版本開始,navigationStyle: custom對元件無效

    <!-- 通过src 来传递当前url, 通过bindmessage 来监听html的传值 --> <web-view src="{{url}}" bindmessage="getMessage" />
    登入後複製
    新建

    /page/webview/index.js
  • #
    // pages/webview/index.js const app = getApp(); Page({ data: { url: "", shareData: {}, postData: {}, }, onLoad: function (options) { // nickName ,token 是登录之后拿到的信息 , 用来和h5 交互 let nickName = wx.getStorageSync("nickName"); let token = wx.getStorageSync("token"); let url = options.url; if (url) { //请注意传递url 请务必使用 decodeURIComponent 和 encodeURIComponent , 不然会白屏 url = decodeURIComponent(url); } //因为小程序 貌似还不能主动和H5 交互,所以拿到的登录信息,我们通过url 来传递. let localUrl = ""; if (token) { localUrl = url + "?token=" + userToken + "&nickName=" + nickName; } //犹豫地址存了token 和其他信息,分享会暴露,所以要手动重置分享地址 数据为 shareData this.setData({ url: localUrl, shareData: { titil: "测试小程序", desc: "测试小程序藐视描述", path: url, }, }); }, getMessage(e) { //此处接收html传递过来的参数 this.postData = e.detail.data; }, /** * 用户点击右上角分享 */ onShareAppMessage() { //重置分享链接和路径 return { title: this.shareData.title, desc: this.shareData.desc, path: this.shareData.path, }; }, });
    登入後複製

    互動範例web端在web端,我們知道如何判斷web是在小程式中,可以透過微信jsskd直接傳送互動訊息,和在原生的微信小程式裡一樣做路由跳轉

    // 前面我们已经定义了window.wx = wx ,这里可以直接调用 // 还可以通过url 来获取token 等相关信息 if (OS == "RN") { //这里假设我们有多重环境.. } if (OS == "wxminiprogram") { wx.miniProgram.navigateTo({ url: "/pages/webview/index?url=" + decodeURIComponent("https://www.chuchur.com?id=100"), }); }
    登入後複製
    給小程式發送資料
    wx.miniProgram.postMessage({ data: { hello: "wrold", }, }); //web-view 则通过 bindmessage 来监听 传过来的数据
    登入後複製

    更多方法

wx.miniProgram.navigateBack(); //返回 wx.miniProgram.switchTab(); //切换底部的导航 wx.miniProgram.reLaunch(); //重新加载 wx.miniProgram.redirectTo(); //地址重定向 wx.miniProgram.getEnv(); //获取当前环境
登入後複製
相關問題

你有沒有遇過

redirectTo

死都無法跳轉的問題呢,你怎麼改他都不執行,或是執行成功了,還是無法跳轉,你甚至改為

redirectTo

都沒有用。

因為

redirectTo無法跳到目前的page

,以及在###app.json###下面###tabBar => list###裡面定義的###pagePath###,假如你要跳轉的###url###剛好在###pagePath###裡面定義過,那麼請使用switchTab。 ###############更多API############請參考官網API的位址:######https://developers.weixin .qq.com/miniprogram/dev/component/web-view.html ######請參考微信JS-SDK說明文件的位址:######https://developers.weixin.qq.com /doc/offiaccount/OA_Web_Apps/JS-SDK.html##########推薦學習:###H5影片教學#######

以上是淺析微信小程式和web之間的互動(程式碼分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:chuchur.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!