微信小程序?qū)崿F(xiàn)打開并下載服務(wù)器上面的pdf文件到手機(jī)
談一談ios的bug:
關(guān)于ios系統(tǒng)的bug這塊也是快把柚子給逼瘋了啊,ios系統(tǒng)是沒(méi)有文件管理的,柚子用了很多辦法,最后終于確定不管用什么辦法ios都是實(shí)現(xiàn)不了下載的,只能實(shí)現(xiàn)在線查看。所以沒(méi)辦法,如果不考慮兼容ios的話,是很簡(jiǎn)單就能解決的,但是我想沒(méi)有哪一個(gè)小程序會(huì)不讓你兼容ios的吧!
先看一下不兼容ios系統(tǒng)的下載柚子是怎么實(shí)現(xiàn)的吧:
首先我們需要在頁(yè)面里寫入一個(gè)按鈕,用來(lái)觸發(fā)pdf的打開和下載,寫上點(diǎn)擊事件
//查看并下載 See_download() { wx.downloadFile({//下載 url: url,//服務(wù)器上的pdf地址 filePath: wx.env.USER_DATA_PATH + '/test.pdf',//自定義文件地址 success: function (res) { var filePath = res.filePath wx.openDocument({//打開 filePath: filePath, success: function (res) {} }) } }) }
OK,執(zhí)行完成后就已經(jīng)下載了,并且也已經(jīng)打開了,但是柚子剛剛就說(shuō)了,ios是不支持下載的,也就是說(shuō)ios可以正常打開,但是不能下載,就是這樣,另外安卓的是下載了,但是不太好找,他的存放目錄是:文件管理/Tencent/MicroMsg/wxanewfiles/
一個(gè)名字很長(zhǎng)的文件夾/test.pdf
好了,這就是不兼容ios下載的方法,但是遇到問(wèn)題了總要想辦法解決的啊,最后實(shí)在沒(méi)辦法了,只能稍微改一下需求,改成了轉(zhuǎn)發(fā),反正下載下來(lái)也是要發(fā)給別人看的嘛,還不如直接點(diǎn)擊按鈕實(shí)現(xiàn)轉(zhuǎn)發(fā)給微信好友了呢
但是微信小程序的轉(zhuǎn)發(fā)是只能轉(zhuǎn)發(fā)頁(yè)面的,所以柚子就新建了一個(gè)專門存放pdf文件的頁(yè)面,我們默人打開這個(gè)頁(yè)面就自動(dòng)打開pdf也是一樣的效果:下面是實(shí)現(xiàn)思路,僅供參考:
1、首先需要一個(gè)轉(zhuǎn)發(fā)按鈕,要獲取微信的通訊錄的話,按鈕中需要加入open-type="share"
這個(gè)屬性的
<button type="primary" size="mini" open-type="share" > 轉(zhuǎn)發(fā) </button>
2、有了轉(zhuǎn)發(fā)按鈕我們直接在頁(yè)面中寫方法即可:
onShareAppMessage: function (res) { return { title: '轉(zhuǎn)發(fā)的標(biāo)題', path: '/pages/pdf/pdf?url=' + this.data.url,//這個(gè)url是要帶到轉(zhuǎn)發(fā)的那個(gè)頁(yè)面的 imageUrl: '/static/images/pdf.png', //圖片可以是本地圖片 } },
//注:此方法是不用點(diǎn)擊事件觸發(fā)的,只要有open-type="share"
就會(huì)觸發(fā),還有就是此方法是不能異步獲取參數(shù)的,所有要帶到轉(zhuǎn)發(fā)頁(yè)面的參數(shù)都要在轉(zhuǎn)發(fā)之前獲取到
3、下面就是轉(zhuǎn)發(fā)的頁(yè)面中的內(nèi)容了,要在打開這個(gè)頁(yè)面的時(shí)候就進(jìn)入pdf文件,為了頁(yè)面的美觀,柚子又做了一些優(yōu)化,不需要的可以忽略,下面是代碼:
<view> <view class="btn_box" wx:if="{{show_btn}}"> <button type="primary" bindtap="home">返回首頁(yè)</button> <navigator class="back" open-type="exit" target="miniProgram">關(guān)閉小程序</navigator> </view> </view> /* pages/pdf/pdf.wxss */ .btn_box{ width: 100%; box-sizing: border-box; padding: 30rpx 5%; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); margin-top: -50rpx; } button{ margin-top: 50rpx; height: 100rpx; line-height: 100rpx; } .back{ width: 100%; margin-top: 50rpx; height: 100rpx; line-height: 100rpx; color: #FFF; background-color: #E64340; box-sizing: border-box; font-size: 18px; text-align: center; border-radius: 10rpx; } // pages/pdf/pdf.js Page({ /** * 頁(yè)面的初始數(shù)據(jù) */ data: { check:0, url:'', show_btn:false, }, /** * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載 */ onLoad: function (options) { this.setData({ url: options.url }) }, // 返回首頁(yè) home(){ wx.reLaunch({ url: '/pages/index/index' }) }, /** * 生命周期函數(shù)--監(jiān)聽頁(yè)面顯示 */ onShow: function () { var that = this wx.showLoading({ title: '加載中...', }) if(this.data.check == 0){ this.setData({ check:1 }) wx.downloadFile({ url: that.data.url, filePath: wx.env.USER_DATA_PATH + '/' + that.data.name, success: function (res) { var filePath = res.filePath wx.openDocument({ filePath: filePath, success: function (res) { wx.hideLoading(); } }) } }) }else{ wx.hideLoading(); this.setData({ show_btn:true }) } }, })
好了就是這些了,如果還有不懂的朋友歡迎咨詢,另外如果有更好的辦法,或者是支持ios下載pdf的文件的,或者轉(zhuǎn)發(fā)pdf的更好的方法也希望能告訴柚子一下,柚子感激不盡!
總結(jié)
以上所述是小編給大家介紹的微信小程序?qū)崿F(xiàn)打開并下載服務(wù)器上面的pdf文件到手機(jī),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- 微信小程序上傳圖片到服務(wù)器實(shí)例代碼
- 微信小程序 消息推送php服務(wù)器驗(yàn)證實(shí)例詳解
- 微信小程序ajax實(shí)現(xiàn)請(qǐng)求服務(wù)器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能示例
- 微信小程序使用wx.request請(qǐng)求服務(wù)器json數(shù)據(jù)并渲染到頁(yè)面操作示例
- 微信小程序搭建自己的Https服務(wù)器
- 微信小程序遇到修改數(shù)據(jù)后頁(yè)面不渲染的問(wèn)題解決
- 微信小程序 數(shù)據(jù)交互與渲染實(shí)例詳解
- 微信小程序 條件渲染詳解
- 微信小程序 教程之列表渲染
- 微信小程序使用for循環(huán)動(dòng)態(tài)渲染頁(yè)面操作示例
- 微信小程序模版渲染詳解
- 微信小程序開發(fā)(一):服務(wù)器獲取數(shù)據(jù)列表渲染操作示例
相關(guān)文章
javascript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)頁(yè)面
本文給大家介紹了如何使用javascript實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)到其他頁(yè)面的方法以及實(shí)現(xiàn)原理,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2016-01-01JS動(dòng)態(tài)插入并立即執(zhí)行回調(diào)函數(shù)的方法
這篇文章主要介紹了JS動(dòng)態(tài)插入并立即執(zhí)行回調(diào)函數(shù)的方法,實(shí)例分析了動(dòng)態(tài)插入js文件及執(zhí)行回調(diào)函數(shù)的相關(guān)技巧,需要的朋友可以參考下2016-04-04iframe父子頁(yè)面實(shí)現(xiàn)共用滾動(dòng)條的常見方法
在開發(fā)過(guò)程中,有時(shí)候需要用到iframe復(fù)用不同域名下的頁(yè)面內(nèi)容,為了提供連貫的用戶體驗(yàn),經(jīng)常需要在主頁(yè)面(父頁(yè)面)和iframe子頁(yè)面之間共享滾動(dòng)位置,本文將介紹其中較為常見的一種方法來(lái)實(shí)現(xiàn)iframe父子頁(yè)面共用滾動(dòng)條,需要的朋友可以參考下2024-05-05JavaScript運(yùn)動(dòng)函數(shù)實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript的運(yùn)動(dòng)函數(shù),使用實(shí)例在論證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02js 獲取json數(shù)組里面數(shù)組的長(zhǎng)度實(shí)例
下面小編就為大家?guī)?lái)一篇js 獲取json數(shù)組里面數(shù)組的長(zhǎng)度實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10通過(guò)偽協(xié)議解決父頁(yè)面與iframe頁(yè)面通信的問(wèn)題
這篇文章主要介紹了通過(guò)偽協(xié)議解決父頁(yè)面與iframe頁(yè)面通信的問(wèn)題,需要的朋友可以參考下2015-04-04js實(shí)現(xiàn)點(diǎn)擊每個(gè)li節(jié)點(diǎn),都彈出其文本值及修改
本篇文章主要分享了js實(shí)現(xiàn)點(diǎn)擊每個(gè)li節(jié)點(diǎn),都彈出其文本值及修改的實(shí)例代碼,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12