微信小程序判断文章内容关键词,文章触发关键词,自动跳转小程序页面

前言:

博主的某个项目之前在网络中发布了很多推广帖子,由于部分平台不能直接放二维码,所以便用的小程序码推广。

近日博主的突发灵感,将本来用来做引流中转的小程序直接用H5嵌入进落地H5页面,当然这个页面通过测试已经可以微信登录、微信拉起付款。

那么现在问题就来了,之前发布的大量推广帖子,用的小程序码是固定的小程序路径,我们不可能去把之前发的文章都修改一遍吧,如果把这个小程序路径写死修改成webview呢,又考虑到后续的小程序功能和换成H5效果未知,运营成本有点太大了,那么能不能借助修改小程序代码,让这个推广页面随我们心意,让它跳webview嵌入的H5页面它就跳,不让跳就还是输出之前的内容?

答案是可以的,效果如下:

正常:

%title插图%num

检测到文章含有指定关键词,触发跳转页面:

%title插图%num

实现思路:

当后端页面输出带有特定关键词(如“#即将自动跳转小程序#”)时,小程序可以自动判断并跳转到一个新的页面(如pages/webview/index)。实现这个目标主要涉及到以下几个步骤:

  1. 获取后端数据并检测关键词:在页面加载时,我们需要从后端获取页面数据,并检测返回的数据是否包含特定的关键词。
  2. 根据检测结果进行跳转:如果检测到特定关键词,则跳转到指定的页面;否则,正常显示当前页面的内容。

具体实现步骤如下:

这里仅做思路参考,不可完全照搬,因为小程序不同代码是不同的,这里如果你不会推荐你去问问神奇的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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容