微信H5開發遇到的坑(二)

ios中滾動沒有慣性問題

ios設備上dom的滾動都沒有慣性,
解決方案

body{
  -webkit-overflow-scrolling: touch;
}

但是在項目應用中使用這個之後出現了一個新的問題;動態創建的節點在第一次訪問時只能渲染出首屏,並且無法滾動

Vue單頁面應用配置微信SDK

之前做公衆號開發的時候,需求編輯每個頁面的分享功能,項目是vue開發的,vue-router用的是hash模式,網上看了很多相關的文章、博客,大致的觀點就是每個路由都要進行微信授權,也就是wx.config()操作;

單獨路由授權操作

如果只是單獨的路由調用,授權時完全沒有問題的,代碼如下
        ajax({
                url : "",//後端獲取相關簽名接口
                data : {
                  url : encodeURIComponent(location.href.split("#")[0])//此處傳遞頁面url是因爲服務器端使用了代理模式,無法獲取請求頁面的url,如果沒有代理存在,url的獲取可以交由後端完成
                },
                success:res =>{
                  wx.config({
                    debug : false, //開啓調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時纔會打印。
                    appId : res.data.appId, // 必填,公衆號的唯一標識
                    timestamp : res.data.timestamp, // 必填,生成簽名的時間戳
                    nonceStr : res.data.nonceStr, // 必填,生成簽名的隨機串
                    signature : res.data.signature,// 必填,簽名
                    jsApiList : [] // 必填,需要使用的JS接口列表
                  });
                }
            })

所有路由都需要授權

但是如果所有路由都需要授權時,比如分享接口,項目的所有頁面都必須支持;這時候就會存在着代碼的複用問題,一開始是想着既然所有路由都要配置,我直接在APP.vue裏面的watch $route監聽路由變化時執行授權操作,但是結果行不通,折騰了半天只能放棄;

後面有想過直接把授權操作放到每個路由的mounted生命週期裏面,應該也能實現效果,但是這裏存在一個問題,每一次路由的變化都會執行一次ajax請求,所以體驗和性能方面可能會比較差;在許多文章和博客裏面也都是這樣做的;

既然微信官方文檔裏面說的hash部分的變化不影響頁面的授權,我在想vue-router用的是hash模式,那麼整個項目除了域名,後面的路由部分應該都算是hash,所以乾脆把授權操作放到了index.html裏面,直接在index.html裏面引入sdk文件,然後進行授權操作,結果授權是通過的;
然後在需要使用的路由頁面中調用api接口

    mounted(){
        //由於index.html裏面引入了sdk文件,相當於window上面掛載了以個wx對象,所以此處的wx不需要再引入其他文件
        wx.ready(()=>{
            let shareData={
              title:"分享標題",
              desc:"分享內容描述",
              link : "", // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公衆號JS安全域名一致
              imgUrl : "", // 分享圖標
              success : function(){
                // 設置成功
              }
            }
            wx.updateAppMessageShareData(shareData);
            wx.updateTimelineShareData(shareData);
            wx.onMenuShareAppMessage(shareData);
            wx.onMenuShareTimeline(shareData);
        })
    }

代碼丟到服務器上去了,效果也確實實現了,而且只有一次授權,所有路由都有效果,至於有什麼弊端,還請各位大神給點意見,這個問題我也一直沒有想明白,既然能一次解決,爲什麼所有的文章、博客都在說每個路由都要進行一次授權

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章