获取当前url参数并跳转指定链接拼接参数

<template>
  <div class="app-container">
    当前浏览器url的参数 {{ params }}

    <el-button @click="goSubSystem"> 登陆</el-button>
  </div>
</template>

<script>
export default {
  name: "subSystem",
  data() {
    return {
      params: {},
    };
  },
  created() {},
  beforeMount() {
    var queryName = window.location.href;
    function GetRequest() {
      //两种方式,输入链接获取或当前链接获取
      if (typeof urlStr == "undefined") {
        var url = decodeURI(location.search); //获取url中"?"符后的字符串
      } else {
        var url = "?" + urlStr.split("?")[1];
      }
      var theRequest = new Object();
      if (url.indexOf("?") != -1) {
        var str = url.substr(1); //去掉问号,问号为第一个字符
        var strs = str.split("&");
        for (var i = 0; i < strs.length; i++) {
          theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);
        }
      }
      return theRequest;
    }
    this.params = GetRequest(queryName);
    console.log(this.params);
    var ua = navigator.userAgent.toLowerCase();
    // if (
    //   ua.match(/MicroMessenger/i) == "micromessenger" ||
    //   ua.match(/iphone os/i) == "iphone os" ||
    //   ua.match(/ipad/i) == "ipad" ||
    //   ua.match(/android/i) == "android" ||
    //   ua.match(/midp/i) == "midp" ||
    //   ua.match(/rv:1.2.3.4/i) == "rv:1.2.3.4" ||
    //   ua.match(/ucweb/i) == "ucweb" ||
    //   ua.match(/windows ce/i) == "windows ce" ||
    //   ua.match(/windows mobile/i) == "windows mobile"
    // ) {
    //   alert("移动端");
      
    // }
  },
  methods: {
    goSubSystem() {
      window.location.href = `http://3689052b9f.zicp.vip/auth/wechatlogin?code=${this.params.code}&state=${this.params.state}`;
    },
  },
};
</script>

### H5 URL 参数传递与 `encodeURIComponent` 和 `decodeURIComponent` 的实现 在 H5 页面跳转过程中,可以通过 URL 传递参数来实现在不同页面间共享数据的功能。为了确保特殊字符不会破坏 URL 结构,通常会对这些参数进行编码和解码操作。 #### 编码过程 当需要将某些敏感字符(如中文、空格或其他特殊符号)作为 URL 参数传递时,可以使用 `encodeURIComponent()` 方法对其进行编码。该方法会将指定的字符串转换为可以在 URI 中使用的合法格式[^1]。 ```javascript // 示例:对参数进行编码 const name = "张三"; const age = 28; const city = "北京"; let encodedName = encodeURIComponent(name); let encodedAge = encodeURIComponent(age.toString()); let encodedCity = encodeURIComponent(city); console.log(`name=${encodedName}&age=${encodedAge}&city=${encodedCity}`); ``` 上述代码片段展示了如何利用 `encodeURIComponent()` 对多个参数分别进行编码,将其拼接成完整的查询字符串形式。 #### 解码过程 接收端收到经过编码处理后的 URL 后,则需调用 `decodeURIComponent()` 来恢复原始值。此函数能够识别替换掉所有有效的转义序列,从而还原出未被修改的真实内容[^2]。 ```javascript // 假设这是从服务器获取到的一个完整URL链接 const urlWithParams = "https://example.com?name=%E5%BC%A0%E4%B8%89&age=28&city=%E5%8C%97%E4%BA%AC"; function getQueryParameters(urlString) { let queryStartIndex = urlString.indexOf('?') + 1; let queryString = urlString.slice(queryStartIndex); return queryString.split('&').reduce((params, paramPair) => { let [key, value] = paramPair.split('='); params[key] = decodeURIComponent(value); // 进行解码 return params; }, {}); } let decodedParams = getQueryParameters(urlWithParams); console.log(decodedParams); ``` 以上脚本定义了一个辅助功能——解析整个 URL 其中的关键字/数值配对关系表单。它还演示了怎样运用 `decodeURIComponent()` 函数逐一解开每一个键对应的值。 #### 完整流程实例 下面给出一个更贴近实际应用场景的例子,展示从前端发送带有加密参数的请求至后台服务再由后者反馈回来的过程: ```javascript // 加密阶段 - 发送方准备要传输的数据包 function encryptData(dataObj){ var encryptedUrlPart = ''; for(var key in dataObj){ if (dataObj.hasOwnProperty(key)) { encryptedUrlPart += `${encodeURIComponent(key)}=${encodeURIComponent(dataObj[key])}&`; } } return encryptedUrlPart.substring(0,encryptedUrlPart.length-1); } var postData={username:"李四",password:"mypassword"}; window.location.href='http://targetsite.com/login?' + encryptData(postData); // 解密阶段 - 接收方解读传来的资料串流 function decryptData(receivedQueryString){ let pairs=receivedQueryString.split("&"); let result={}; for(let i=0;i<pairs.length;i++){ let pair=pairs[i].split("="); result[pair[0]]=decodeURIComponent(pair[1]); } return result; } let receivedQS=(new URL(document.location)).search.substr(1); let finalResult=decryptData(receivedQS); console.log(finalResult); ``` 这段程序先是在客户端构建好待提交的信息体通过超链路导航命令触发页动作;随后目标网页加载完毕之后立即执行相应的逻辑去捕获当前地址里的附加成分进而完成最终的结果呈现工作。 ### 注意事项 尽管现代浏览器普遍支持这两种内置的方法,但在极端情况下仍可能出现兼容性问题。因此建议开发者始终测试自己的应用能否正常运作于各种主流平台之上[^3]。 此外需要注意的是,虽然本文讨论的重点在于手动控制参数编解码环节,但实际上许多流行的 JavaScript 库已经提供了更加简便易用的相关接口供我们选用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值