页面间跳转携带参数对象

父页面

clickDetail(item){
let objStr = JSON.stringify(item);
uni.navigateTo({
url: '/pages/policy/detail?id='+item.id+'&obj='+encodeURIComponent(objStr)
});
}

子页面

onLoad: function (options) {
let objStr = decodeURIComponent(options.obj);
let obj = JSON.parse(objStr);
}

通过正则表达式替换url链接

由于小程序图片显示的组件无法配置head参数携带token变量,进而无法直接访问图片地址。通过下载图片得到临时访问路径,在替换富文本中匹配url地址,进而实现在小程序中预览富文本信息;

正则表达式解析:
/(src=')([^']*)(')/g

/和/g : 表示开始、结束
() : 表示 捕获组,括号中的内容会保存,后续引用和使用
[^'] : 表示 匹配除'号的任意字符序列

通过正则批量处理原html文本中url地址信息代码片段

// 示例HTML代码,包含多个img标签
let htmlString = '<image url='https://xxx.xxx.xx/'/>';

// 正则表达式匹配所有src属性
const regex = /(src=')([^']*)(')/g;
let match;

// 创建一个数组来保存所有的Promise
let promises = [];

// 使用循环遍历所有匹配的src属性
while ((match = regex.exec(htmlString)) !== null) {
// 获取已匹配字符串数组
const [fullMatch, prefix, url, suffix] = match;

let promise = this.downloadTmpFile(url).then(newValue => {
// 构建替换后的字符串
let replacement = `${prefix}${newValue}${suffix}`;
// 替换原字符串中的匹配部分
htmlString = htmlString.replace(fullMatch, replacement);
}).catch(err => {
console.error('下载文件失败:', err);
});

promises.push(promise); // 将Promise添加到数组中
}

// 使用Promise.all来等待所有的Promise解决
Promise.all(promises).then(() => {
this.strings = htmlString;
});

uniapp中调用downloadFile获取指定url链接下载的临时文件地址

downloadTmpFile(url){
return new Promise((resolve, reject) => {
uni.downloadFile({
url: url,
header: {
'token': uni.getStorageSync('token')
},
success: (res) => {
if (res.statusCode === 200) {
let newValue = res.tempFilePath;
resolve(newValue); // 解决Promise并返回新值
}
},
fail: (err) => {
reject(err); // 如果下载失败,拒绝Promise并返回错误
},
complete:(res) => {
//console.log('下载完成',res);
}
});
});
}