記錄--uniapp相容微信小程式和支付寶小程式遇到的坑

林恒發表於2024-07-17

🧑‍💻 寫在開頭

點贊 + 收藏 === 學會🤣🤣🤣

1、支付寶不支援v-show

改為v-if。

2、v-html

App端和H5端支援 v-html ,微信小程式會被轉為 rich-text,其他端不支援 v-html。

解決方法:去外掛市場找一個支援跨端的富文字元件。

3、導航欄處有背景色延伸至導航欄外

相容微信小程式和支付寶小程式

pages.json:給支付寶的導航欄設定透明

{
	"path": "pages/agent/agent",
	"style": {
		"navigationStyle": "custom",
		"enablePullDownRefresh": false,
		"mp-alipay": {
			"transparentTitle": "always",
			"titlePenetrate": "YES"
		}
	}
}

agent頁面:

支付寶加上my.setNavigationBar設定標題文字即可,微信需要自定義導航欄

html:

<template>
    <view style="height: 100vh;position: relative;">
		<view class="bj"></view>
		<view class="status_bar"></view>
		<!-- #ifndef MP-ALIPAY -->
		<view class="back" @click="back" :style="{ top: menuButton.top + 'px', height: menuButton.height + 'px' }">
			<view class="text1"></view>
			代理中心
		</view>
		<!-- #endif -->
</template>

js:

<script>
	export default {
		data() {
			return {
				menuButton: {}
			}
		},
		onLoad() {
			// #ifdef MP-WEIXIN
			this.menuButton = uni.getMenuButtonBoundingClientRect()
			// #endif
			
			// #ifdef MP-ALIPAY
			my.setNavigationBar({
				title: '代理中心'
			})
			// #endif
		},
		methods: {
			back() {
				uni.navigateBack({
					delta: 1,
				})
			},
		}
	}
</script>

css:

.bj {
	background: linear-gradient(180deg, #ffbdbd, #ff8f8f);
	height: 460rpx;
	width: 100%;
	position: absolute;
}
.status_bar {
	height: var(--status-bar-height);
	width: 100%;
}
.back {
	position: fixed;
	z-index: 99;
	display: flex;
	align-items: center;
	color: #292929;
}
.text1 {
	margin-right: 14rpx;
	margin-left: 32rpx;
	width: 16rpx;
	height: 16rpx;
	border-left: 2px solid #292929;
	border-top: 2px solid #292929;
	transform: rotate(-45deg);
}

參考:小程式文件 - 支付寶文件中心

4、獲取節點資訊,支付寶不相容uni.createSelectorQuery().in中的in

//#ifdef MP-WEIXIN
uni.createSelectorQuery().in(this).selectAll('.content_box').boundingClientRect(res => {
	this.nodeData = res
}).exec();
//#endif
//#ifdef MP-ALIPAY
my.createSelectorQuery().selectAll('.content_box').boundingClientRect().exec(res => {
	this.nodeData = res[0]
})
//#endif

5、客服

open-type="contact" 僅支援:微信小程式、百度小程式、快手小程式、抖音小程式

<!-- #ifdef MP-WEIXIN -->
<button open-type="contact"></button>
<!-- #endif -->

支付寶接入客服:

首先在支付寶開放平臺開通螞蟻智慧客服:支付寶開放平臺-->控制檯-->小程式資訊-->線上客服

開通後點選小程式的右上角三個點就有客服功能了

如果想點選某個按鈕時進入客服頁面:

<contact-button
  tnt-inst-id="企業編碼"
  scene="聊天窗編碼"
  size="諮詢按鈕大小"
  color="諮詢按鈕顏色"
  icon="諮詢按鈕圖片url,例如:https://xxx/service.png"
/>

tips: 企業編碼、聊天窗編碼在:

tips: contact-button本身無法修改樣式,若想達到自己想要的效果如:

方法:父元素設定相對定位 + overflow: hidden超出隱藏,子元素裡迴圈很多個contact-button出來,絕對定位,並使用opacity:0隱藏,程式碼:

<view style="position: relative;width: 100%;overflow: hidden;display: flex;">
	<view>官方客服</view>
	<view class="iconfont iconfanhui1"></view>
	<view class="alipyContact" style="opacity:0; position: absolute;">
		<contact-button size="40rpx" v-for="(item,index) in 15" :key="index" />
	</view>
</view>

參考:小程式文件 - 支付寶文件中心

6、position: fixed在支付寶小程式會被彈出的鍵盤頂上去

如下圖: “同意《服務和隱私協議》”被彈起的鍵盤帶上來了

7、uniapp小程式超出限制:Error: 分包大小超過限制,main package source size 4199KB exceed max limit 2MB

改了幾行程式碼上傳時發現超過限制,解決方法:

https://www.cnblogs.com/Denny_Yang/p/16769455.html

8、uniapp 使用 require 絕對路徑引入檔案時,報錯“檔案查詢失敗”

我在 main.js 中使用絕對路徑引入:

// 引入請求封裝,將app引數傳遞到配置中
require('/config/request.js')(app)

 出現:

原因:

參考:js 檔案引入 | uni-app官網

解決方案:使用相對路徑即可

// 以下兩種方式都可以
require('config/request.js')(app)
require('./config/request.js')(app)

9、頁面跳轉時,絕對路徑和相對路徑的區別

以`uni.navigateTo`舉例:

uni.navigateTo({
	url: 'pagesB/pages/publishQues'
})
uni.navigateTo({
	url: '/pagesB/pages/publishQues'
})

  

`uni.navigateTo` 的 `url` 引數支援相對路徑和絕對路徑兩種方式。
 
相對路徑是相對於當前頁面的位置進行計算,而絕對路徑是從根目錄開始計算
 
- `uni.navigateTo({ url: 'pagesB/pages/publishQues' })` 使用的是相對路徑。
如果當前頁面路徑是 `pagesB/pages/index`,那麼相對路徑 `pagesB/pages/publishQues` 
會拼接在當前頁面路徑的基礎上,
得到最終跳轉路徑為 `pagesB/pages/pagesB/pages/publishQues`。
 
- `uni.navigateTo({ url: '/pagesB/pages/publishQues' })` 使用的是絕對路徑。
無論當前頁面路徑是什麼,絕對路徑 `/pagesB/pages/publishQues` 都是從根目錄開始計算,
因此最終的跳轉路徑是 `pagesB/pages/publishQues`。

10、報錯SyntaxError: Unexpected token } in JSON at position 264

報錯:

Module build failed (from ./node_modules/@dcloudio/webpack-uni-pages-loader/lib/index.js):
08:58:30.510 SyntaxError: Unexpected token } in JSON at position 264
08:58:30.513 at JSON.parse (<anonymous>)

在小程式編譯時,有些會報上述錯誤,有些不會,很難察覺這個錯誤,錯誤程式碼示例:

{
	"path": "pages/index/index",
	"style": {
		"navigationBarTitleText": "標題",
		"enablePullDownRefresh": false,
		"navigationStyle": "custom",
		// #ifdef MP-TOUTIAO
		"navigationStyle": "default"
		// #endif
	}
},

原因:在JSON中,物件的最後一個元素後面不應該有逗號。

例如,{"key1": "value1", "key2": "value2",} 這樣的寫法是錯誤的。 假設在微信小程式中執行上述程式碼,就是多了一個逗號

改正:

{
	"path": "pages/index/index",
	"style": {
		"navigationBarTitleText": "標題",
		"navigationStyle": "custom",
		// #ifdef MP-TOUTIAO
		"navigationStyle": "default",
		// #endif
        "enablePullDownRefresh": false
	}
},

  

本文轉載於:https://blog.csdn.net/m0_59962820/article/details/131835746

如果對您有所幫助,歡迎您點個關注,我會定時更新技術文件,大家一起討論學習,一起進步。

記錄--uniapp相容微信小程式和支付寶小程式遇到的坑

相關文章