最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序Webview與H5通信的思路與實(shí)戰(zhàn)記錄

 更新時(shí)間:2025年01月15日 09:33:32   作者:歸宿樂(lè)瑤  
這篇文章主要介紹了微信小程序Webview與H5通信的思路與實(shí)戰(zhàn)的相關(guān)資料,由于微信小程序與H5之間的通信限制,無(wú)法滿(mǎn)足業(yè)務(wù)需求,通過(guò)動(dòng)態(tài)改變url的hash值來(lái)傳遞參數(shù),并利用vue-router組件的路由守衛(wèi)來(lái)避免頁(yè)面刷新,需要的朋友可以參考下

背景

近期有個(gè)微信小程序需要用到web-view嵌套H5的場(chǎng)景,該應(yīng)用場(chǎng)景需要小程序中頻繁傳遞數(shù)據(jù)到H5進(jìn)行渲染,且需要保證頁(yè)面不刷新。

由于微信小程序與H5之間的通信限制比較大,顯然無(wú)法滿(mǎn)足于我的業(yè)務(wù)場(chǎng)景

探索

由于微信小程序與webview的環(huán)境是完全隔離的,且沒(méi)有突破的地方,只能將關(guān)鍵點(diǎn)放在已開(kāi)放的方式上來(lái);中間有利用公共存儲(chǔ)空間cookie、SessionStorageLocalStorage,但是很遺憾,無(wú)法突破,后面也采用websocket利用服務(wù)器來(lái)進(jìn)行雙向交互,但是由于網(wǎng)絡(luò)的不穩(wěn)定性,導(dǎo)致數(shù)據(jù)可能會(huì)有一定的延遲。

思路

既然小程序只能通過(guò)改變url鏈接來(lái)向H5傳遞參數(shù),那么我就動(dòng)態(tài)改變url來(lái)傳遞即可,但是還需要解決的問(wèn)題是,一旦改變url頁(yè)面會(huì)重新加載,這個(gè)是不能接受的。

路由的hash模式正好可以做到這一點(diǎn),那么我們通過(guò)動(dòng)態(tài)改變urlhash值,H5頁(yè)面監(jiān)聽(tīng)hash值的變化就能完美解決該問(wèn)題了,話(huà)不多說(shuō),直接開(kāi)干。

實(shí)戰(zhàn)

小程序

web-view代碼

<web-view src="{{url}}{{hashStr}}"></web-view>

 小程序js代碼,代碼通過(guò)setInterval模擬實(shí)時(shí)傳遞不同參數(shù)到H5

Component({
    data: {
        url: `http://127.0.0.1:8080/home?type=wx`,
        hashStr: '',
    },
    methods: {
        onLoad: function () {
            const _this = this;           

            setInterval(() => {
                //此處模擬動(dòng)態(tài)改變url的hash值給h5傳值
                const postData={
                    name: 'zhangsan',
                    time: +new Date()
                }
                _this.setData({hashStr:`#time=${JSON.stringify(postData)}`})
            }, 2000);
        },
      
    }
});

注意:hashStr的值必須以#開(kāi)始,瀏覽器才會(huì)識(shí)別為hash,否則無(wú)效

H5應(yīng)用

在js中添加一個(gè)hashchange監(jiān)聽(tīng)window.location.hash的變化即可

window.onhashchange = function() {
    console.log('The hash has changed!');
    const newHash = window.location.hash;
    console.log('New hash:', newHash);
};

以上方式即可完美解決我的應(yīng)用場(chǎng)景

以為結(jié)束了,其實(shí)還沒(méi)有,上面的方式的確可行,但是我是vue項(xiàng)目呀,其中還用到了vue-router組件,通過(guò)上述直接監(jiān)聽(tīng)頁(yè)面還是會(huì)刷新

 由于使用了vue-router插件,那么hash的變化,vue-router會(huì)默認(rèn)通過(guò)hash來(lái)進(jìn)行導(dǎo)航,也會(huì)加載刷新頁(yè)面,所以我們還需要設(shè)置一個(gè)路由守衛(wèi),用來(lái)判斷如果path沒(méi)有變化,只是hash改變,則不進(jìn)行導(dǎo)航;具體配置如下:

import {createRouter, createWebHashHistory} from "vue-router";

const routes= [ {
      path: '/home',
      name: 'home',
      component: () => import('../components/Home.vue')
    },
]
const router = createRouter({
    history: createWebHashHistory(),
    routes
});

router.beforeEach((to, from, next) => {
    if (to.path===from.path) {     
        next(false); // 阻止導(dǎo)航行為
    } else {
        next(); // 正常導(dǎo)航
    }
});

export default router;

注意點(diǎn):

1、微信小程序會(huì)對(duì)url進(jìn)行decodeURIComponent編碼,故在解析的的時(shí)候,注意使用encodeURIComponent解碼

2、如果動(dòng)態(tài)改變url的hash頻率過(guò)快,由于vue-router在內(nèi)部調(diào)用了history.replaceState(),如果太頻繁會(huì)觸發(fā)瀏覽器的安全策略?huà)伋鲆粋€(gè)SecurityError錯(cuò)誤,這個(gè)可能是我的vue-router版本瀏覽器兼容性問(wèn)題導(dǎo)致的,對(duì)此沒(méi)有深究,有哪位大佬知道的麻煩為小弟解惑。

SecurityError: Failed to execute replaceState onHistory: Attempt to use history.replaceState() more than100 times per 30 secondsin

總結(jié) 

到此這篇關(guān)于微信小程序Webview與H5通信的文章就介紹到這了,更多相關(guān)微信小程序Webview與H5通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼

    vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼

    本文主要介紹了vue實(shí)現(xiàn)兩列水平時(shí)間軸的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Vue中父子組件的值傳遞與方法傳遞

    Vue中父子組件的值傳遞與方法傳遞

    這篇文章主要介紹了Vue中父子組件的值傳遞與方法傳遞,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談 Vue v-model指令的實(shí)現(xiàn)原理

    淺談 Vue v-model指令的實(shí)現(xiàn)原理

    vue的v-model是一個(gè)十分強(qiáng)大的指令,它可以自動(dòng)讓原生表單組件的值自動(dòng)和你選擇的值綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • vue3使用vis繪制甘特圖制作timeline可拖動(dòng)時(shí)間軸及時(shí)間軸中文化(推薦)

    vue3使用vis繪制甘特圖制作timeline可拖動(dòng)時(shí)間軸及時(shí)間軸中文化(推薦)

    這篇文章主要介紹了vue3使用vis繪制甘特圖制作timeline可拖動(dòng)時(shí)間軸,時(shí)間軸中文化,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 在Vue項(xiàng)目中取消ESLint代碼檢測(cè)的步驟講解

    在Vue項(xiàng)目中取消ESLint代碼檢測(cè)的步驟講解

    今天小編就為大家分享一篇關(guān)于在Vue項(xiàng)目中取消ESLint代碼檢測(cè)的步驟講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Vue中父組件向子組件通信的方法

    Vue中父組件向子組件通信的方法

    可以使用props將父組件的數(shù)據(jù)傳給子組件。子組件在接受數(shù)據(jù)時(shí)要顯示聲明props。下面通過(guò)一個(gè)例子給大家介紹Vue中父組件向子組件通信的方法,需要的朋友參考下吧
    2017-07-07
  • Vue3中的provide、inject 的用法

    Vue3中的provide、inject 的用法

    這篇文章主要介紹了Vue3中的provide、inject 的用法,需要的朋友可以參考下
    2023-03-03
  • vue在自定義組件上使用v-model和.sync的方法實(shí)例

    vue在自定義組件上使用v-model和.sync的方法實(shí)例

    自定義組件的v-model和.sync修飾符其實(shí)本質(zhì)上都是vue的語(yǔ)法糖,用于實(shí)現(xiàn)父子組件的"數(shù)據(jù)"雙向綁定,下面這篇文章主要給大家介紹了關(guān)于vue在自定義組件上使用v-model和.sync的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 記一次vue去除#問(wèn)題處理經(jīng)過(guò)小結(jié)

    記一次vue去除#問(wèn)題處理經(jīng)過(guò)小結(jié)

    這篇文章主要介紹了vue去除#問(wèn)題處理經(jīng)過(guò),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Vue3+Vite4項(xiàng)目進(jìn)行性能優(yōu)化的配置方案

    Vue3+Vite4項(xiàng)目進(jìn)行性能優(yōu)化的配置方案

    這篇文章主要為大家詳細(xì)介紹了Vue3如何結(jié)合Vite4對(duì)項(xiàng)目進(jìn)行性能優(yōu)化的相關(guān)配置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04

最新評(píng)論

德兴市| 泸州市| 叶城县| 梧州市| 含山县| 三都| 永泰县| 禄丰县| 罗甸县| 梅河口市| 南岸区| 河间市| 孟连| 乌兰浩特市| 绥滨县| 陵川县| 桑植县| 大埔县| 册亨县| 井冈山市| 永春县| 泾川县| 砚山县| 南部县| 盘锦市| 德令哈市| 苍溪县| 金阳县| 嘉兴市| 永年县| 金坛市| 丰顺县| 铜山县| 道孚县| 敖汉旗| 平阳县| 无极县| 云阳县| 平凉市| 方山县| 闵行区|