洞悉互聯(lián)網(wǎng)前沿資訊,探尋網(wǎng)站營銷規(guī)律
作者:狐靈科技 | 2019-10-19 14:21 |點(diǎn)擊:
項(xiàng)目地址:https://github.com/sennyla/WebchatShare
需求是這樣子的:小程序啟動授權(quán)等操作成功后直接跳轉(zhuǎn)到內(nèi)嵌網(wǎng)頁,內(nèi)嵌的網(wǎng)址也就是公司的官網(wǎng)產(chǎn)品項(xiàng)目,而后,產(chǎn)品項(xiàng)目里面的各個網(wǎng)頁都能支持分享操作,當(dāng)然,對方打開的一定是你分享的那個頁面而不是整個小程序初始頁面。
解決思路:官方提供的轉(zhuǎn)發(fā)接口 onShareAppMessage 中自定義路徑即可轉(zhuǎn)發(fā)指定的頁面。使用 web-view 存放內(nèi)嵌網(wǎng)頁,路徑以參數(shù)的形式傳遞,但初始化加載頁面的時候再填充路徑。
一開始是想著既然內(nèi)嵌網(wǎng)頁的路徑可以動態(tài)添加,那我轉(zhuǎn)發(fā)時再重新跳轉(zhuǎn)回內(nèi)嵌網(wǎng)頁,附上我轉(zhuǎn)發(fā)的這個地址就好了,但是,但是,打開轉(zhuǎn)發(fā)了的頁面時,竟然提示找不到路徑,可謂愁死人了??刂婆_打印檢查發(fā)現(xiàn),onShareAppMessage(options) 中 options 攜帶了一個參數(shù) webViewUrl,即當(dāng)前轉(zhuǎn)發(fā)的文件的路徑,在轉(zhuǎn)發(fā)成功之后,通過
this.setData({ web_src: options.webViewUrl }) 賦值后,打開的轉(zhuǎn)發(fā)頁面依舊提示找不到頁面。經(jīng)仔細(xì)研究 onShareAppMessage 接口中各個值的含義和功能后,得出以下結(jié)論
onShareAppMessage: function (res) { if (res.from === 'button') { // 來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕 console.log(res.target) } return { title: '自定義轉(zhuǎn)發(fā)標(biāo)題', path: '/page/user?id=123', success: function(res) { // 轉(zhuǎn)發(fā)成功 }, fail: function(res) { // 轉(zhuǎn)發(fā)失敗 } } } path:轉(zhuǎn)發(fā)路徑, 注:當(dāng)前頁面 path ,必須是以 / 開頭的完整路徑 個人對這個 path 的理解是這樣子的,微信小程序接口里面的path,是不是 指代微信小程序里跳轉(zhuǎn)到其他頁面的路徑,如果一個內(nèi)嵌路徑無法實(shí)現(xiàn)轉(zhuǎn)載操作頁面和分享頁面,那我就分開好了,再加一個內(nèi)嵌路徑來專門存放轉(zhuǎn)發(fā)的結(jié)果。果不其然,這樣子一處理,還真能實(shí)現(xiàn)了需求,話不多說,上代碼:
步驟一:準(zhǔn)備工作,在 app.js里 定義一個全局變量,用于存放 內(nèi)嵌網(wǎng)頁的地址,如,
globalData: { userInfo: null, ctxPath: 'https://xxxxxx', } 步驟二:在初始化頁面,即首頁存放一個按鈕,定義跳轉(zhuǎn)到內(nèi)嵌網(wǎng)頁的事件,如,
開啟
對應(yīng)的事件為:
toHome:function(){ let that = this; wx.redirectTo({ url: '../pcweb/pcweb' }) }, 步驟三:使用 web-view 加載內(nèi)嵌網(wǎng)頁,(注:pcweb.wxml 中)
對應(yīng)的事件為:
//生命周期函數(shù)--監(jiān)聽頁面加載 onLoad: function (options) { //初始化頁面的時候加載補(bǔ)充內(nèi)嵌網(wǎng)頁的路徑 let that = this; that.setData({ web_src: ctxPath
}) }, 備注:因?yàn)閮?nèi)嵌網(wǎng)頁網(wǎng)址之前存放成全局變量在app.js里,故我們要先引入全局變量
var app = getApp(); var ctxPath = app.globalData.ctxPath; //內(nèi)嵌網(wǎng)頁的路徑 分享操作實(shí)現(xiàn): onShareAppMessage: function (options) { let that = this let return_url = options.webViewUrl //分享的當(dāng)前頁面的路徑 var path = 'pages/sharepage/sharepage?shareUrl=' + return_url //小程序存放分享頁面的內(nèi)嵌網(wǎng)頁路徑 console.log(path, options) return { title: '內(nèi)嵌網(wǎng)頁分享', path: path, success: function (res) { // 轉(zhuǎn)發(fā)成功 wx.showToast({ title: "轉(zhuǎn)發(fā)成功", icon: 'success', duration: 2000 }) }, fail: function (res) { // 轉(zhuǎn)發(fā)失敗 } } },
步驟四:定義存放分享頁面的內(nèi)嵌網(wǎng)頁路徑,即 sharepage.wxml,附上如下代碼:
//share_src:分享后的路徑 定義事件:
onLoad: function (options) { console.log(options) let that = this; that.setData({ share_src: options.shareUrl, }) }, 打開分享的頁面時獲取之前分享操作時傳遞的參數(shù),即路徑,并在打開分享的初始化函數(shù)中填充路徑值options.shareUrl ,
同樣,倘若想要在打開分享的頁面中進(jìn)行分享操作的話,然后需要補(bǔ)充分享事件,只是這次跳轉(zhuǎn)的路徑指向本身,
并且分享成功時將分享時的路徑再次賦值給share_src,
onShareAppMessage(options) { var that = this var return_url = options.webViewUrl var path = 'pages/sharepage/sharepage?shareUrl=' + return_url //分享成功后跳轉(zhuǎn)回本頁面 console.log(path, options) return { title: '內(nèi)嵌網(wǎng)頁分享', path: path, success: function (res) { // 轉(zhuǎn)發(fā)成功 wx.showToast({ title: "轉(zhuǎn)發(fā)成功", icon: 'success', duration: 2000 }) that.setData({
share_src: return_url //再次賦值分享內(nèi)嵌網(wǎng)頁的路徑 }) }, fail: function (res) { // 轉(zhuǎn)發(fā)失敗 } } }, 至此,小程序內(nèi)嵌網(wǎng)頁的分享就完成了。