ios 使用window.location.href 不能跳转微信短链处置惩罚过程以及解决方法 ...

打印 上一主题 下一主题

主题 782|帖子 782|积分 2346

需求配景:

        由h5提供页面,通过后台哀求微信api生成对应的schemal短链,该h5页面嵌入到原生的ios以及安卓app上,当用户点击后通过短毗连跳转到其他小程序中
以下为生成微信scheme代码示例,生成后短链为:weixin://dl/business/?t=l97aMn7aZF 这种
  1. /**
  2.      *  生成短连接
  3.      * @param data
  4.      * @return
  5.      */
  6.     public static String getUrlScheme(JSONObject data) {
  7.         try {
  8.             log.info("==>获取小程序跳转地址,mchnt:{}", data);
  9.             String appId = data.getString("appId");
  10.             String secret = data.getString("secret");
  11.             String accessToken = getAccessToken(appId, secret);
  12.             return generateWechatScheme(accessToken, data);
  13.         } catch (Exception e) {
  14.             log.error("==>获取小程序跳转地址失败", e);
  15.             throw new FuiouException("5022","获取小程序跳转地址失败");
  16.         }
  17.     }
  18.     /**
  19.      * 向微信服务端请求生成小程序 scheme
  20.      */
  21.     public static String generateWechatScheme(String accessToken, JSONObject data) {
  22.         CloseableHttpClient client = HttpClientUtil.createClient();
  23.         String url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=" + accessToken;
  24.         HttpPost request = new HttpPost(url);
  25.         request.setHeader("Content-Type", "application/json; charset=utf-8");
  26.         String path = data.get("path").toString();
  27.         String queryStr = data.get("queryStr").toString();
  28.         String env_version = data.get("env_version").toString();
  29.         // 构建请求体 JSON
  30.         String requestBody = "{"jump_wxa":{"path":"" + path + "","query":"" + queryStr
  31.                 + "","env_version":"" + env_version
  32.                 + ""},"is_expire":false,"expire_type":1,"expire_interval":" + 1 + "}";
  33.         request.setEntity(new StringEntity(requestBody, StandardCharsets.UTF_8));
  34.         log.info("==>调用微信generatescheme接口,request body:" + requestBody);
  35.         String response = HttpClientUtil.executeAndClose(client, request);
  36.         log.info("==>调用微信generatescheme接口,response:" + response);
  37.         JSONObject jsResp = JSONObject.parseObject(response);
  38.         String openlink = jsResp.getString("openlink");
  39.         log.info("==>获取到的微信小程序scheme:" + openlink);
  40.         return openlink;
  41.     }
  42.     /**
  43.      * 获取 access_token
  44.      */
  45.     private static String getAccessToken(String appId, String secret) {
  46.         String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
  47.         CloseableHttpClient client = HttpClientUtil.createClient();
  48.         HttpGet request = new HttpGet(url);
  49.         String response = HttpClientUtil.executeAndClose(client, request);
  50.         log.info("==>获取微信accessToken,response:" + response);
  51.         JSONObject jsResp = JSONObject.parseObject(response);
  52.         String accessToken = jsResp.getString("access_token");
  53.         return accessToken;
  54.     }
复制代码
所遇到问题:

        短链如:weixin://dl/business/?t=l97aMn7aZF
        通过短链在前端利用js  window.location.href = weixin://dl/business/?t=l97aMn7aZF 举行跳转,在安卓上面能正常跳转,但是ios无法跳转,且没有反应
解决问题思绪

        1、查抄schema 是否精确,在ios真机测试也是可以跳;排除
        2、将window.location.href 更换为 window.location  以及换为 windos.open(xx) 等多种方式均不可行;
       3、猜疑是h5页面的meta 写的有问题,随即更换为meta 信息,举行测试,还是不可;
       4、原来都预备放弃,让ios提供一个原生方法,本身这边判断如果是ios就调用原生方法举行跳转,附一段js ios 判断代码
  
  1. function isIos(){
  2.     var u = window.navigator.userAgent;
  3.     var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  4.     return     isiOS;
  5. }
复制代码
       5、这时间经同事提醒,将链接放到其他页面,看是否可跳转,然后将链接放到首页测试是否可以跳转,这时间神奇的事情发生了,竟然ios 能正常跳了,同样是 window.location.href 
     6、拿到h5页面开始分析首页和2级页面的区别,发现首页没有无层级关系,而二级目录有一个ifream页面,以下为二级页面
   

      
最终解决方案

        颠末以上分析后得知,window.location.href 不能跳出父框架,由于须要唤起小程序,所以须要跳出ifream ,但是安卓没问题,可能是语法的限制,最终知道解决方案
  1. <strong>window.top.location.href</strong> = xx 微信的短链     及可正常跳转
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表