关于H5禁用window.open以及解决方法

问题描述

之前做了一个需求,要求判断用户在点击职位列表的时候,判断用户是否登录,若未登录则直接跳转到登录页,登陆完成后自动跳转到对应的职位详情页;若已登录则直接跳转到相应职位详情页。
又因为产品要求是统一打开新窗口,因此我在pc和移动端都直接使用了window.open()。我在js里写的逻辑就是拦截了a标签的默认行为,判断登陆状态和浏览器所处环境,根据条件进而跳转到不同的页面。

解决方法

  1. 创建一个a标签元素插入到文档中并用js模拟点击事件(但是我实际用不太好用)
  2. 移动端用window.location.href跳转
// 获取所有带有类名"login-required"的a标签
  const loginRequiredLinks = document.querySelectorAll(".login-required");

  // 给每个需要登录的链接添加点击事件处理函数
  loginRequiredLinks.forEach(function (link) {
    link.addEventListener("click", function (event) {
      var fromUrl = $(this).attr('href')
      var isMob = false;
      // 如果用户未登录,则阻止a标签的默认跳转行为
      if (toUrl) {
        event.preventDefault();
        var aimurl = toUrl
        if (
            navigator.userAgent.match(
              /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
            )
          ){
            isMob = true;
            aimurl = '/recruit/member/choose'
          }
        // 显示吐司提示
        showToast("请先登录");

        // 在一定时间后跳转到登录页
        setTimeout(function () {
          // window.location.href = aimurl+`?from=${fromUrl}`; // 将URL替换为实际的登录页URL
          if(!isMob){
            window.open(aimurl+`?from=${fromUrl}`)
          }else{
            window.location.href = aimurl+`?from=${fromUrl}`;
          }
        }, 2000); 
      }
      // 如果用户已登录,则a标签会继续执行默认的跳转行为
    });
  });

  // 吐司提示函数
  function showToast(message) {
    // 创建一个div元素作为吐司提示框
    const toastDiv = $("<div></div>");
    toastDiv.text(message);
    toastDiv.addClass("toast");

    // 将吐司提示框添加到body中
    $("body").append(toastDiv);

    // 设置一定时间后自动隐藏吐司提示框
    setTimeout(function () {
      toastDiv.remove();
    }, 2000); // 这里设置了2秒的显示时间,可以根据需要调整显示时间
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值