網(wǎng)頁如何與小程序交互通信

概述

網(wǎng)頁與小程序交互和通信需要在小程序里使用 web-view 組件打開網(wǎng)頁策州,而且被訪問的網(wǎng)頁需要引入微信的 js-sdk串述,通過 js-sdk 提供的接口來給小程序發(fā)信息。

具體可以參考小程序官方文檔:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

小程序后臺配置業(yè)務(wù)域名

這是小程序開發(fā)的限制谬盐,在 web-view 里要打開的網(wǎng)頁的域名要先在微信公眾平臺小程序后臺 開發(fā) --> 開發(fā)設(shè)置 --> 業(yè)務(wù)域名 里添加一項(xiàng)炕置,否則 web-view 無法打開這個網(wǎng)頁。

PS:不想配置這個的話也可以在 微信開發(fā)者工具 里面開啟 不校驗(yàn)合法域名欧芽。

網(wǎng)頁引入微信js-sdk

微信JS-SDK 是微信提供的基于微信內(nèi)的網(wǎng)頁開發(fā)工具包莉掂。做過微信公眾號網(wǎng)頁開發(fā)的同學(xué)應(yīng)該就知道了(那是出了名的難用……)

官方文檔鏈接:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

怎么引入我就不寫了千扔,同學(xué)們按上面的文檔提示操作就好憎妙。

想用npm方式引用的話也可以找第三方,我用的是這個 weixin-js-sdk曲楚。

網(wǎng)頁向小程序發(fā)送消息

我做了個很簡單的demo頁厘唾,演示了導(dǎo)航到小程序頁面和給小程序發(fā)消息的功能。

頁面如下:

1.png

頁面是用 vue 寫的龙誊,很簡單抚垃,直接上代碼了:

<template>
    <section>
        <section>
            <h2>點(diǎn)擊圖片事件</h2>
            <div @click="onClick">
                <img src="https://via.placeholder.com/300x150" alt="">
            </div>
        </section>

        <section>
            <h2>與小程序交互</h2>
            <button @click="switchTab">回到小程序首頁</button>
            <button @click="postMessage">給小程序發(fā)消息</button>
        </section>

    </section>
</template>

<script>
    const wx = require('weixin-js-sdk');
                    
    export default {
          data () {
            return {
                isMiniprogram: false, // 是否是小程序環(huán)境
            };
        },

        mounted () {
            this.wx = wx;
            this.wx.miniProgram.getEnv((res) => {
                console.log('getEnv', res, res.miniprogram);
                this.isMiniprogram = true;
            });
        },

        methods: {
            onClick () {
                console.log('點(diǎn)擊圖片', this.wx);
            },
            switchTab () {
                if (this.isMiniprogram) {
                    this.wx.miniProgram.switchTab({
                        url: '/pages/index/index',
                        success: function (res) {
                            console.log('success', res);
                        },
                        fail: function (err) {
                            console.log('fail', err);
                        },
                        complete: function (res) {
                            console.log('complete', res);
                        },
                    });
                }
            },
            postMessage () {
                if (this.isMiniprogram) {
                    this.wx.miniProgram.postMessage({
                        data: { foo: 'bar' },
                    });
                }
            },
        },
    };
</script>

<style lang="scss" scoped>
    button {
        padding: 10px;
        background: #333;
        color: #fff;
        border: none;
        margin-right: 10px;
        border-radius: 5px;
    }

    h2 {
        padding: 30px 0 20px 0;
    }

    section {
        text-align: center;
    }
</style>

這里有幾個要注意的點(diǎn):

  • 導(dǎo)航到小程序頁面的時候跟小程序開發(fā)的路由方法是一樣的,即如果要導(dǎo)航到 tabbar 頁面趟大,不能用 navigateTo 方法鹤树,要用 switchTab,否則的話在小程序調(diào)試時不會發(fā)生任何跳轉(zhuǎn)逊朽,而且居然沒有任何錯誤提示罕伯。(我就是在這被坑了……)

  • wx.miniProgram.postMessage 方法的參數(shù)格式是對象,而且要有 data 屬性惋耙,即 {data:...} 這樣捣炬,不然在小程序里收不到。

  • 微信js-sdk官方文檔說使用所有接口前都需要先配置權(quán)限绽榛,然而J帷!miniProgram 這一系列方法是可以不用 config 的……關(guān)于這個社區(qū)有人問過:小程序跳轉(zhuǎn)網(wǎng)頁有bug嗎灭美。因?yàn)槲疫@個網(wǎng)頁不想拿微信用戶信息推溃,所以這一點(diǎn)對我來說還是比較重要的。

小程序接收消息

小程序 web-viewbindmessage 不會在網(wǎng)頁發(fā)送完消息后立刻收到届腐,而是會在小程序后退铁坎、組件銷毀、分享時觸發(fā)并收到消息犁苏。而且如果網(wǎng)頁發(fā)送了多次消息硬萍,在小程序接收的時候會把 data 合并。

網(wǎng)頁向小程序 postMessage 時围详,會在特定時機(jī)(小程序后退朴乖、組件銷毀祖屏、分享)觸發(fā)并收到消息。e.detail = { data }买羞,data是多次 postMessage 的參數(shù)組成的數(shù)組

直接看一下代碼和輸出

代碼:

<!-- wxml -->

<view class='web-view'>
  <web-view src="{{url}}" bindmessage="getMsgFromWeb" bindload="onWebLoad" binderror="onWebError"></web-view>
</view>
// js

  getMsgFromWeb(e) {
    console.log('getMsgFromWeb', e.detail.data)
  },

  onWebLoad(e) {
    console.log('onWebLoad', e)
  },

  onWebError(e) {
    console.error('onWebError', e)
  }

輸出:

2.png

上面的截圖是我點(diǎn)擊了10次發(fā)送消息按鈕袁勺,然后 getMsgFromWeb 的輸出是在我點(diǎn)了回到小程序首頁按鈕后輸出的。

End

網(wǎng)頁和小程序交互通信的基本實(shí)現(xiàn)方式就是這樣啦畜普,因?yàn)樽约洪_發(fā)的時候被坑了一下期丰,在此做個記錄,希望對還在爬坑的同學(xué)有用~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吃挑,一起剝皮案震驚了整個濱河市钝荡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儒鹿,老刑警劉巖化撕,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異约炎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蟹瘾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門圾浅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憾朴,你說我怎么就攤上這事狸捕。” “怎么了众雷?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵灸拍,是天一觀的道長。 經(jīng)常有香客問我砾省,道長鸡岗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任编兄,我火速辦了婚禮轩性,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狠鸳。我一直安慰自己揣苏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布件舵。 她就那樣靜靜地躺著卸察,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铅祸。 梳的紋絲不亂的頭發(fā)上坑质,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼洪乍。 笑死眯杏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壳澳。 我是一名探鬼主播岂贩,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巷波!你這毒婦竟也來了萎津?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抹镊,失蹤者是張志新(化名)和其女友劉穎锉屈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垮耳,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颈渊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了终佛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俊嗽。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铃彰,靈堂內(nèi)的尸體忽然破棺而出绍豁,到底是詐尸還是另有隱情,我是刑警寧澤牙捉,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布竹揍,位于F島的核電站,受9級特大地震影響邪铲,放射性物質(zhì)發(fā)生泄漏芬位。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一霜浴、第九天 我趴在偏房一處隱蔽的房頂上張望晶衷。 院中可真熱鬧,春花似錦阴孟、人聲如沸晌纫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锹漱。三九已至,卻和暖如春慕嚷,著一層夾襖步出監(jiān)牢的瞬間哥牍,已是汗流浹背毕泌。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗅辣,地道東北人撼泛。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像澡谭,于是被迫代替她去往敵國和親愿题。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容