前言:
博主的某个项目之前在网络中发布了很多推广帖子,由于部分平台不能直接放二维码,所以便用的小程序码推广。
近日博主的突发灵感,将本来用来做引流中转的小程序直接用H5嵌入进落地H5页面,当然这个页面通过测试已经可以微信登录、微信拉起付款。
那么现在问题就来了,之前发布的大量推广帖子,用的小程序码是固定的小程序路径,我们不可能去把之前发的文章都修改一遍吧,如果把这个小程序路径写死修改成webview呢,又考虑到后续的小程序功能和换成H5效果未知,运营成本有点太大了,那么能不能借助修改小程序代码,让这个推广页面随我们心意,让它跳webview嵌入的H5页面它就跳,不让跳就还是输出之前的内容?
答案是可以的,效果如下:
正常: | 检测到文章含有指定关键词,触发跳转页面: |
实现思路:
当后端页面输出带有特定关键词(如“#即将自动跳转小程序#”)时,小程序可以自动判断并跳转到一个新的页面(如pages/webview/index
)。实现这个目标主要涉及到以下几个步骤:
- 获取后端数据并检测关键词:在页面加载时,我们需要从后端获取页面数据,并检测返回的数据是否包含特定的关键词。
- 根据检测结果进行跳转:如果检测到特定关键词,则跳转到指定的页面;否则,正常显示当前页面的内容。
具体实现步骤如下:
这里仅做思路参考,不可完全照搬,因为小程序不同代码是不同的,这里如果你不会推荐你去问问神奇的AI。
实现步骤:
1. 获取后端数据并检测关键词
在小程序页面的onLoad
生命周期函数中,我们需要发送请求获取后端数据,并在数据返回后进行关键词检测。
onLoad: function onLoad(option) {
if (!option.id) {
return;
}
this.postid = option.id;
// 在页面加载前进行判断
this.checkAndRedirect();
},
我们定义了一个checkAndRedirect
方法,用于发送请求并检测返回数据中的关键词。
methods: {
checkAndRedirect: function() {
var _this = this;
uni.request({
method: "post",
url: this.$store.state.restUrl + 'getPost',
header: this.$store.state.headerToken,
data: {
postId: this.postid
},
success: function success(res) {
if (res.statusCode != 403) {
if (res.data.content.includes("#即将自动跳转小程序#")) {
uni.navigateTo({
url: '/pages/webview/index'
});
} else {
_this.loadPostData();
}
} else {
_this.loadPostData();
}
}
});
},
2. 根据检测结果进行跳转
如果返回的数据中包含特定关键词,我们使用uni.navigateTo
方法跳转到指定页面。
if (res.data.content.includes("#即将自动跳转小程序#")) {
uni.navigateTo({
url: '/pages/webview/index'
});
} else {
_this.loadPostData();
}
完整代码实现
以下是完整的代码实现,包括页面加载前检测关键词并进行跳转的逻辑:
export default {
components: {
b2content: b2content
},
data: function data() {
return {
loadingStatus: true,
data: '',
postid: 0,
videoIndex: 0,
commentCount: 0,
seo: {
imageUrl: '',
content: '',
desc: ''
},
load: false,
vi: ''
};
},
computed: {
pageLocked: function pageLocked() {
return this.$store.state.pageLocked;
}
},
onPullDownRefresh: function onPullDownRefresh() {
uni.showLoading({
title: '加载中...'
});
this.loadPostData();
},
onReachBottom: function onReachBottom() {
// if(this.$refs.comment){
// this.$refs.comment.getComment();
// }
},
onShow: function onShow() {
if (this.$store.state.reflash) {
uni.showLoading({
title: '加载中...'
});
this.loadPostData();
}
},
onLoad: function onLoad(option) {
if (!option.id) {
return;
}
this.postid = option.id;
if (option.vi === 0 || option.vi) {
this.vi = option.vi;
}
// 在页面加载前进行判断
this.checkAndRedirect();
},
onShareAppMessage: function onShareAppMessage(res) {
return {
title: this.data.title,
path: '/pages/single/post?id=' + this.postid + '&vi=' + this.videoIndex,
imageUrl: this.seo.imageUrl,
content: this.seo.content,
desc: this.seo.desc
};
},
onShareTimeline: function onShareTimeline() {
return {
title: this.data.title,
path: '/pages/single/post?id=' + this.postid + '&vi=' + this.videoIndex
};
},
methods: {
checkAndRedirect: function() {
var _this = this;
uni.request({
method: "post",
url: this.$store.state.restUrl + 'getPost',
header: this.$store.state.headerToken,
data: {
postId: this.postid
},
success: function success(res) {
if (res.statusCode != 403) {
if (res.data.content.includes("#即将自动跳转小程序#")) {
uni.navigateTo({
url: '/pages/webview/index'
});
} else {
_this.loadPostData();
}
} else {
_this.loadPostData();
}
}
});
},
openComment: function openComment() {
this.$refs.comment.openComment(true);
},
reload: function reload() {
uni.showLoading({
title: '加载中...'
});
this.loadPostData();
},
getDogeVideo: function getDogeVideo(data) {
var _this = this;
return new Promise(function (resolve) {
uni.request({
method: "post",
url: _this.$store.state.restUrlNormal + 'getDogeVideo',
header: _this.$store.state.headerToken,
data: {
id: data.id,
token: data.token
},
success: function success(res) {
if (res.data != 403) {
resolve(res.data);
} else {
uni.showModal({
content: res.data.message,
showCancel: false
});
}
}
});
});
},
indexChange: function indexChange(index) {
this.videoIndex = index;
},
resetVideos: function resetVideos(data) {
var _this2 = this;
return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
var i, url;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(data.video && data.video.videos.length > 0)) {
_context.next = 11;
break;
}
i = 0;
case 2:
if (!(i < data.video.videos.length)) {
_context.next = 11;
break;
}
if (!data.video.videos[i].id) {
_context.next = 8;
break;
}
_context.next = 6;
return _this2.getDogeVideo(data.video.videos[i]);
case 6:
url = _context.sent;
if (url) {
_this2.$set(data.video.videos[i], 'url', url);
}
case 8:
i++;
_context.next = 2;
break;
case 11:
return _context.abrupt("return", data);
case 12:
case "end":
return _context.stop();
}
}
}, _callee);
}))();
},
loadPostData: function loadPostData() {
var _this3 = this;
var guest = uni.getStorageSync('b2_guest_buy_' + this.postid + '_x');
uni.request({
method: "post",
url: this.$store.state.restUrl + 'getPost',
header: this.$store.state.headerToken,
data: {
postId: this.postid,
guest: guest
},
success: function () {
var _success = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(res) {
var i;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(res.statusCode != 403)) {
_context2.next = 14;
break;
}
if (res.data.video.videos && res.data.video.videos.length > 0) {
for (i = 0; i < res.data.video.videos.length; i++) {
if (res.data.video.videos[i].url && (res.data.video.videos[i].url.indexOf('bilibili.com') !== -1 || res.data.video.videos[i].url.indexOf('v.qq.com') !== -1)) {
_this3.$delete(res.data.video.videos, i);
}
}
}
_context2.next = 4;
return _this3.resetVideos(res.data);
case 4:
res.data = _context2.sent;
_this3.data = res.data;
_this3.seo.imageUrl = _this3.data.seo.img;
_this3.seo.content = _this3.data.seo.desc;
_this3.seo.desc = _this3.data.seo.desc;
_this3.loadingStatus = false;
_this3.commentCount = _this3.data.meta.comment;
uni.stopPullDownRefresh();
_this3.$store.state.reflash = false;
_this3.$nextTick(function () {
_this3.load = true;
if (_this3.vi !== '') {
_this3.videoIndex = _this3.vi;
}
});
case 14:
uni.hideLoading();
case 15:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function success(_x) {
return _success.apply(this, arguments);
}
return success;
}()
});
}
}
};
通过这些步骤,我们可以实现根据后端返回内容自动跳转到指定页面的功能,灵活地控制小程序的页面跳转行为。
希望能够帮助到你,本文提供思路,具体功能实现请举一反三或用ai帮你
© 版权声明
THE END
暂无评论内容