uniapp设置微信分享

微信分享 wx.config is not a function uniapp分享

在uniapp中,用vue3写微信端H5,设置分享的时候,直接在index.html中引入<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>编译的时候貌似不会处理,虽然不报错,引入成功了,但是自定义的参数都无效,控制台会报错:wx.config is not a function。

去查了一下uniapp的官网,是集成了微信分享的,然后wx这个变量名称被占用了,所以需要动态引入:
先设置分享参数:

const shareTitle = ref('分享的标题')

const shareContent = ref('分享的内容')

const shareLink = ref('分享的链接')

const shareImage = ref('分享的图片,必须是公网可以读取到的')

然后写一个动态引入的方法:

59/158491098351a37c9fa94bd7db5bc6.png

方法内容如下:
function loadWxSdk() {

return new Promise((resolve, reject) => {

if (window.wx && typeof wx.config === 'function') {

resolve(window.wx);

return;

}


const script = document.createElement('script');

script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js';

script.onload = () => {

if (window.wx && typeof wx.config === 'function') {

resolve(window.wx);

} else {

reject(new Error('微信 JS-SDK 加载成功但无法访问 config 方法'));

}

};

script.onerror = () => reject(new Error('微信 JS-SDK 加载失败'));

document.head.appendChild(script);

});

}



在需要设置分享的位置,执行方法:

23/fef531dc8fb363f5b98db3dfad9da4.png

方法内容如下:

async function initWechatShare() {

try {

//这个名称可以随便去,不要叫wx就行

const jsWechat = await loadWxSdk()

// 通过后端接口获取签名配置

const shareConfig = await setSignPackage();

// 初始化配置

jsWechat.config({

debug: false,

appId: shareConfig.appId,

timestamp: shareConfig.timestamp,

nonceStr: shareConfig.nonceStr,

signature: shareConfig.signature,

jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']

});


// 处理成功回调

jsWechat.ready(() => {

console.log('微信 JS-SDK 初始化成功');

// 设置分享信息

jsWechat.updateAppMessageShareData({

title: shareTitle.value,

desc: shareContent.value,

link: shareLink.value,

imgUrl: shareImage.value,

});


jsWechat.updateTimelineShareData({

title: shareTitle.value,

link: shareLink.value,

imgUrl: shareImage.value,

});

});


// 处理错误回调

jsWechat.error(err => {

console.error('wx.config 配置失败:', err);

});

} catch (error) {

console.error('初始化微信分享失败:', error);

}

}


//获取配置代码

function setSignPackage() {

return new Promise((resolve, reject) => {

uni.request({

url: baseUrl + '/signPackage.html',

method: 'POST',

data: {

//这个url必须是动态获取的

url: location.href.split('#')[0]

},

success: (res) => {

if (res.data.status == 1) {

resolve(res.data.data);

} else {

reject(new Error('获取签名失败: ' + res.data.msg));

}

},

fail: (err) => {

reject(err);

}

});

});

}


这样,只要在微信公众平台设置了安全域名的情况下,就可以正常分享了。



网站公告

承接各种网站、小程序、H5、公众号、CMS、CRM、OA等系统开发、维护、托管、外包等服务! 邮箱: 3163316168@qq.com