1. 程式人生 > >淺談小程式內嵌網頁及內嵌網頁跳轉分享實現

淺談小程式內嵌網頁及內嵌網頁跳轉分享實現

上個月,小程式開發內嵌web頁面的功能,這個對於很多微信開發者都是個重大訊息。最近兩天,筆者專案中有這樣一個需求,支援小程式內嵌網頁,並且在內嵌網頁中多次跳轉,分享後,點開還是在跳轉之後的網頁。對於這樣一個新技術,還是充滿好奇,既然老大說了要做,那就嘗試去做唄。

首先,當然是參考微信小程式的api。

<web-view src="https://mp.weixin.qq.com/"></web-view>

其實使用起來特別簡單,只需在頁面中放入這樣一個標籤即可,其中src一定是要在小程式管理中心配置過的。特別注意一下,web-view會佔滿整個頁面,不管這個頁面有什麼其它的東西,都不會展示出來。

好了。有了這個可以開始進入需求實現的階段了。對於分享功能,做過小程式開發的都不會陌生,在需要被分享的頁面js中加入onShareAppMessage這樣一個事件即可。

在 Page 中定義 onShareAppMessage 函式,設定該頁面的轉發資訊。

只有定義了此事件處理函式,右上角選單才會顯示 “轉發” 按鈕

使用者點選轉發按鈕的時候會呼叫

此事件需要 return 一個 Object,用於自定義轉發內容

示例程式碼如下:

Page({
  onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 來自頁面內轉發按鈕
      console.log(res.target)
    }
    return {
      title: '自定義轉發標題',
      path: '/page/user?id=123',
      success: function(res) {
        // 轉發成功
      },
      fail: function(res) {
        // 轉發失敗
      }
    }
  }
})

但是存在web-view時,onShareAppMessage回撥函式引數res中還會多一個webViewUrl

Page({
  onShareAppMessage(options) {
    console.log(options.webViewUrl)
  }
})

看了這麼多api,心裡也有數了,就開始愉快的擼程式碼了。很快,內嵌網頁分享的功能就是實現出來了。

onShareAppMessage(options) {
      var that = this
      var return_url = options.webViewUrl
      return {
        title: that.data.title,
        path: return_url,
        success: function (res) {
          that.web_url = return_url
          // 轉發成功
          wx.showToast({
            title: "轉發成功",
            icon: 'success',
            duration: 2000
          })

        },
        fail: function (res) {
          // 轉發失敗
        }
      }
    },

就在感嘆自己是多麼牛x,一下子就搞出來的時候,發現離需求還差一點。需要實現內嵌網頁內多次跳轉分享的功能,這就需要自己想辦法了。在小程式分享中又不能保持狀態,這個得去記錄分享時網頁的路徑。其實有點開發經驗的都能想到這個辦法,那就是使用?在url後記錄下來,這樣在其它使用者開啟轉發小程式的時候,取出其中的引數,將web-view中的src替換成這個就行了。話不多說,直接上程式碼。

Page({
    web_url:"",
    data: {
      title: '測試內嵌分享',
      url:'',
      web_src:''
    },
    onShareAppMessage(options) {
      var that = this
      var return_url = options.webViewUrl
      var path = '/page/test/test?return_url=' + encodeURIComponent(return_url)
      console.log(path, options)
      return {
        title: that.data.title,
        path: path,
        success: function (res) {
          that.web_url = return_url
          // 轉發成功
          wx.showToast({
            title: "轉發成功",
            icon: 'success',
            duration: 2000
          })
        },
        fail: function (res) {
          // 轉發失敗
        }
      }
    },
    onLoad: function () {
        var pages=getCurrentPages();
        var currentPage = pages[pages.length - 1]; 
        var web_src = decodeURIComponent(currentPage.options.return_url ||
        encodeURIComponent("你的內嵌網頁網址"))
        this.web_url = web_src
        this.setData({
          web_src: web_src
        }, function () {

        });

    }
})

寫到這裡,終於大功告成了。

但是!!!

測試出問題了!!!分享後跳不到想要的頁面!!!

找了n小時的bug,也看不出上面程式碼思路和實現有何問題。由於此項技術也剛釋出不久,市面上幾乎沒有可以參考的文章,只能自己硬著頭皮找。

找啊找,終於在今天早上找到了這個坑。

由於內嵌網頁是單頁面應用,在手機上測試的時候webViewUrl的獲取每次都會出現問題,只有換成一般的多頁面應用,這個問題才不會發現。

也不知道這是不是個微信的bug,總之需求實現了,還是很開心的。

覺得筆者寫得不錯,可以點個贊噠!!!

如果此文中有不對的地方,歡迎大家指正交流!!!

相關推薦

程式網頁網頁分享實現

上個月,小程式開發內嵌web頁面的功能,這個對於很多微信開發者都是個重大訊息。最近兩天,筆者專案中有這樣一個需求,支援小程式內嵌網頁,並且在內嵌網頁中多次跳轉,分享後,點開還是在跳轉之後的網頁。對於這樣一個新技術,還是充滿好奇,既然老大說了要做,那就嘗試去做唄。 首先

程式生命週期

馬上要做小程式的開發啦,看了一波文件,總結一下。 小程式框架 小程式的框架分為檢視層和邏輯層。邏輯層由js 編寫,檢視層由WXML和WXSS編寫。WXML 用來描述頁面結構,相當於HTML;WXSS用來用來描述頁面樣式,相當於CSS。 小程式啟動後,每個頁面的資料放在data(這個

程式獲取使用者資訊介面調整

一. 五一節前調整了獲取使用者資訊介面,迫使我們專案需要更改登入介面,首先看一下官網給出的理由和方法: 為優化使用者體驗,使用 wx.getUserInfo 介面直接彈出授權框的開發方式將逐步不再支援。從2018年4月30日開始,小程式與小遊戲的體驗版

程式開發資訊公告輪播及點選

給大家展示一個簡單的資訊公告輪播,及其點選後跳轉 ,效果如下: wxml <swiper class="swiper_container" vertical="true" autoplay="true" circular="true" interval="2000">

微信程式 tabbar和navigateTo、redirectTo之間的問題

如果頁面要跳轉到tabbar繫結的其中一頁,可以用wx.switchTab並且只能跳轉帶有tabbar的頁面 而redirectTo或者navigateTo則不能跳轉tabbar繫結過的頁面 wx

白如何讀懂Redis快取記憶體與持久化並存主從高可用叢集

一、簡介Redis是一個基於鍵值(K-V)的快取記憶體軟體,和他具有相同功能的軟體有memcached,但其支援更為複雜的資料結構,例如:List,set,sorted set,同時redis具有永續性功能。redis究竟是什麼?對於不同的應用場合,對redis的理解也不相同

對象的創建、存布局和訪問定位

虛擬機創建 head 分配 完成 原子性 mar ava 失敗重試 檢查 在此簡單的記錄一下《深入理解Java虛擬機》第2章的2.3節內容。 對象的創建   這裏的對象的創建是指普通的對象(不包括數組和Class對象)。對象的創建簡單來說就是執行new的時候,虛擬機做出對應

常用視頻加密原理加密的幾種應用形式

課程 所有 客戶 直接 無限 最終 技術 網頁 現在 一、視頻加密視頻加密是對某些自有版權的視頻進行加密處理,用戶只有在一定的條件下才能獲得視頻的觀看權。比如對於教育視頻加密後,只有學員才能觀看,每個學員都有自己的唯一賬號。或者說設定在一定的時間內可以無限次觀看,還有就是不

我國中小企業融資的問題對策_畢業論文(20180404104959)

3.2 融資 畢業論文 對策 3.1 問題 企業 淺談 3.1.1 ?????????????????????С????????????????????????С??????????????????????????С???????GDP????????60%,???????

大型網際網路企業入侵檢測防護策略

前言 如何知道自己所在的企業是否被入侵了?是沒人來“黑”,還是因自身感知能力不足,暫時還無法發現?其實,入侵檢測是每一個大型網際網路企業都要面對的嚴峻挑戰。價值越高的公司,面臨入侵的威脅也越大,即便是Yahoo這樣的網際網路鼻祖,在落幕(被收購)時仍遭遇全量資料失竊的事情。安全無小事,一旦網際網路公司被成功

十年IT,那些程式設計師面試的熱門話題【精華篇】

我自己從08年實習以來,先後經歷了幾家軟體公司,全部是外企,其中有世界500強的通訊企業,有從事期權期貨交易的歐洲中等規模的金融公司,也有為新興公司開發iOS。跨入IT行業以來,我在求職過程中經歷過多次面試,最近兩年也有過多次面試別人的經驗。我感覺現在到了對這個問題發表自己看法的時候,這篇文

CSS首字放大下沉段首縮排2字元

原文出處:https://blog.csdn.net/zhouziyu2011/article/details/53725367 1、CSS首字放大下沉 對首字進行放大下沉,需用到css的偽元素:first-letter。 <!doctype html> <html&g

阿里P8資深架構師Java程式設計師由初級-中級-高階進階詳細介紹

Java從業者職業生涯規劃   Java進階之路-從初級到架構 java技術的學習階段有三 第1個是java基礎,比如對集合類,併發,IO,JVM,記憶體模型,泛型,異常,反射,等有深入瞭解。 第2個是全面的網際網路技術相關知識,比如redis,mogodb,ng

程式自定義元件元件間兩種通訊方式

小程式經常會用到自定義元件,今天來說下五星評論自定義元件,可以單純顯示評分也可以進行評分,及元件間兩種通訊方式 一、在你的專案中根目錄新建components目錄,在components目錄下新建starComment目錄,然後右鍵點選新建Component,會出現如下目錄結構 二、在starComp

程式的頁面棧方式總結

一、頁面棧的處理總結: 二、跳轉方式總結: 利用API跳轉 // 保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面。 // 注意:呼叫 navigateTo

阿里P8架構師——Java程式設計師的路該怎麼走?(九點概括)

第一:提醒自己還有多少沒有學習 學習新東西的第一步是自己認識到哪些不足。這聽起來很簡單,但是有一些經驗的程式設計師要克服這個假設需要很長時間。有很多計算機專業的學生畢業時昂著頭傲慢地說:“這不算什麼,我全都知道”類似這般的虛張聲勢, 剛到工作崗位上,似乎在向每個同事證明自

智慧程式開發生態概覽接入全流程

各位尊敬的合作伙伴大家下午好!我是百度智慧小程式的產品經理時勝利,很高興能成為智慧學院的講師,下面就為大家介紹一下智慧小程式的開發生態概念,以及接入的流程。 小程式—新移動時代下的風口 小程式已經成為新移動時代下的風口,那麼這是怎麼形成的呢? 網際網路時代是飛速發展的

iOS程式設計師的成長與進階

iOS高階工程師是如何進階的 說實話這個話題說的有點大了,其實我有時候也是非常的迷茫的,工作忙的時候還能跟著工作的節奏走,閒下來時間一長就有點迷茫,不知做什麼。這當然是非常恐怖的了,所以現在在迷茫過、在不知所措過之後,想想還是應該寫寫文章屢屢思路再上路,希望自

CodeForces 827D 最小生成樹性質解析題目性質分析

世界真的很大 今天考試時做了這道題,當時有點思路但是完全不敢寫 還是要有勇於嘗試的勇氣,寫著寫著可能就寫出來了 不要畏懼於去想,大多數情況下最後的程式碼都比想象的要簡單 對於熟悉的問題要靈活掌握其性質,對於題目要敢於分析題目的獨有性質 但是一定要仔

POJ 3162 尺取法區間問題運用多源樹上路徑統計

世界真的很大 NOIP近在咫尺,已是迫在眉睫之時 今天卻還是這麼水 做完一道上週的遺留問題 這個尺取法為什麼叫這個名字我也沒搞懂 看題先: description: 一棵n個節點的樹。wc愛跑步,跑n天,第i天從第i個節點開始跑步,每次跑