解决微信分享在红米等机型上,hash链接被截断

场景

  • 微信中的 SPA 分享链接

问题

  • 在红米等机型,存在微信分享链接的hash字段被截断的问题

解决方案

  • 将 hash 参数拼接为 search参数,进行分享
  • 打开分享链接时,立即解析 search 参数,拼接为 hash 参数

方案代码

在 html 的 head 标签中加入如下 jvascript 脚本

  • 将分享链接中的 search 参数解析,拼接为 hash 参数
  • 更新于2017-11-30,主要受我在另一个项目中的启发,用正则解决,要简单很多。
(function() {
    // http://test.wx.papamama.me/public/financeshop/?date=123&spaurl=%2Ffinancial-planner-info%26hashSearch%3Duuid%253D81161
    var reg = /spaurl=([^&$?]{1,})(&|$)/
    var regTestResult = reg.test(location.search)
    
    if (!reg.test(location.search)) return undefined
    
    var newHash = decodeURIComponent(RegExp.$1)
    var newSearch = location.search.replace(reg, '').replace(/&$|\?$/, '')
    
    var targetUrl = location.origin + location.pathname + newSearch + '#' + newHash
    location.replace(targetUrl)
})();

在微信分享初始化分享链接前,对SPA链接进行如下处理:

  • 将分享链接中的 hash 参数解析,拼接为 search 参数
function magicLink(link) {
    // var link = 'http://test.wx.papamama.me/public/financeshop/?date=12321#/financial-planner-info?uuid=81161'
    var hashIndex = link.indexOf('#/')
    var nativeUrl = link.substring(0, hashIndex)
    var spaUrl = link.substring(hashIndex + 1, link.length)
    var targetUrl = ''
    if (/\?/.test(nativeUrl)) {
        targetUrl = nativeUrl + '&spaurl=' + encodeURIComponent(spaUrl)
    } else {
        targetUrl = nativeUrl + '?spaurl=' + encodeURIComponent(spaUrl)
    }
    return targetUrl
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 就在昨天,老妈和我微信视频,说:听说你买了一辆车。可不是吗?我终于买了一辆自行车。哈哈哈哈,两人不约大笑。 我买了...
    木木木侠阅读 4,525评论 0 4
  • 金灿灿的玉米囤满农家的庭院 红通通的小枣晾晒在屋前院后 黑黝黝的豆儿装好袋子聚在屋檐下 丰收!今年的秋,农家院落显...
    丰盈仓廪阅读 4,300评论 0 0
  • 寒风凛冽,寒气袭人,枯草萧疏,绿色尽失,今年的冬天如此苍白凄凉且冷漠. M点燃一支烟,吞云吐雾起来,一圈圈的烟雾,...
    幽谷泉涌阅读 4,338评论 0 1
  • 01 大熊和小琪是大学同学,也是我认识的人里,唯一一对毕业季在一起,结果谈了三年异地恋的恋人。 上周末,大熊还是失...
    子小洛阅读 9,259评论 47 61