基于vue hash模式微信分享#号的解决


Posted in Javascript onSeptember 07, 2020

看代码吧~

// 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?fromTimeline之类的后缀参数,这就造成了分享出去的链接只能进入首页,无法正常跳转到其他路由。
    // 获取签名
    this.$ajax.post(this.apiUrl+"/api/wxShare/getWxConfig",
     this.$qs.stringify({"url":window.location.href.split('#')[0]})).then((res) => {//有人说要加转译encodeURIComponent本人没加具体跟你们的后台协商
     if (res.data.status.code === '0000') {
      wx.config({
       debug: false,
       appId: res.data.data.appid,
       timestamp: res.data.data.timestamp,
       nonceStr: res.data.data.nonceStr,
       signature: res.data.data.signature,
       jsApiList: [
        'onMenuShareTimeline',
        'onMenuShareAppMessage'
       ]
      });
     }
    })
      //处理验证失败的信息
    wx.error(function (res) {
     alert('验证失败返回的信息:',res);
    });
    console.log(window.location.href.split('#')[0])
    wx.ready(function () {
     // 分享给朋友
     wx.onMenuShareAppMessage({
      title: '这是标题', // 分享标题
      desc: "这是测试的数据", // 分享描述
      link: window.location.href.split('#')[0]+'#'+window.location.href.split('#')[1], // 分享链接!这里是关键 因为微信会把我们分享的链接截取掉 我在这里手动拼接上
      imgUrl: '', // 分享图标
      type: '', // 分享类型,music、video或link,不填默认为link
      dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
      success: function () {
       window.alert('已分享给好友');
      },
      cancel: function () {
       // 用户取消分享后执行的回调函数
      },
      fail: function (res) {
       window.alert(JSON.stringify(res));
      }
     });
 
     // 分享到朋友圈
     wx.onMenuShareTimeline({
      title: '这是标题', // 分享标题
      desc: "这是测试的数据", // 分享描述
      link: window.location.href.split('#')[0]+'#'+window.location.href.split('#')[1], // 分享链接
      success: function () {
       window.alert('已分享到朋友圈');
      },
      cancel: function () {
      },
      fail: function (res) {
       window.alert(JSON.stringify(res));
      }
     });

补充知识:解决video标签播放在微信浏览器中自动全屏的坑(vue-video-player使用后续)

属性熟悉

下面是微信video中几个Attribute的作用

poster=“loadbg.jpg” : 视频封面

x-webkit-airplay=“allow” : 允许iOS的airplay

x5-video-player-type=“h5” : 启用x5内核的播放器,是微信安卓版特性,另外在X5内核里,video是单独的一个view,会覆盖在任何元素之上,据说是为了统一用户体验,加上这个属性之后,也可以让其他元素浮在video上面了

x5-playsinline=“true”: 在x5内核的播放器中小屏播放

x5-video-player-fullscreen=“true”: 全屏设置,设置为 true 是防止横屏

x5-video-orientation=“portraint”: 播放方向,landscape横屏,portraint竖屏,默认值为竖屏

webkit-playsinline=“true”: 这个属性是iOS中设置可以让视频在小窗内播放,也就是不是全屏播放

playsinline=“true”: IOS微信浏览器支持小窗内播放

思路与初尝试

上面属性熟悉后,有了些思路, 不就是把上面要的属性都写一遍吗,这样iOS端和android端微信都能起作用, 然鹅, 实际情况并非如此。 经过我无数次尝试, 总结出就是得分开写!!

代码修改

之前:playsinline="playsinline"这里是true写死的,现在改为计算属性playsinline(),代码如下

<video-player class="video-player-box"
         ref="videoPlayer"
         :options="playerOptions"
         :playsinline="playsinline" 
         customEventName="customstatechangedeventname"
   
         @play="onPlayerPlay($event)"
         @pause="onPlayerPause($event)"
         @ended="onPlayerEnded($event)"
         @waiting="onPlayerWaiting($event)"
         @playing="onPlayerPlaying($event)"
         @loadeddata="onPlayerLoadeddata($event)"
         @timeupdate="onPlayerTimeupdate($event)"
         @canplay="onPlayerCanplay($event)"
         @canplaythrough="onPlayerCanplaythrough($event)"
         @statechanged="playerStateChanged($event)"
         @ready="playerReadied">
   </video-player>

添加playsinline()这个计算属性,原因是在安卓和iOS端微信使用的内核不同,所需要的attribute也不同,尝试后,采用x5内核返回false,反之为true

computed: {
  playsinline(){
   var ua = navigator.userAgent.toLocaleLowerCase();
    //x5内核
  if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) {
   return false
  }else{
   //ios端
 return true  
  }
  }
 },

配合jq工具,继续添加两个端所需的属性

//在vue-video-player的onPlayerCanplay(视频可播放)这个方法中添加回调
onPlayerCanplay(player) {
    // console.log('player Canplay!', player)
    //解决自动全屏
    var ua = navigator.userAgent.toLocaleLowerCase();
    //x5内核
   if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) {
   
     $('body').find('video').attr('x-webkit-airplay',true).attr('x5-playsinline',true).attr('webkit-playsinline',true).attr('playsinline',true)
   }else{
   //ios端
     $('body').find('video').attr('webkit-playsinline',"true").attr('playsinline',"true") 
  
   }

   }

总结

以区分两个端内核的不同,按需添加所需的Attribute

":playsinline"组件中自定义属性按内核不同按需传值, x5内核为false,反之为true然后来渲染组件(具体原理有待挖掘)

以上这篇基于vue hash模式微信分享#号的解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
json简单介绍
Jun 10 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
js展开闭合效果演示代码
Jul 24 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
javascript数字验证的实例代码(推荐)
Aug 20 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
在项目vue中使用echarts的操作步骤
Sep 07 #Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 #Javascript
Vue.js原理分析之nextTick实现详解
Sep 07 #Javascript
小程序实现可拖动的悬浮按钮
Sep 07 #Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 #Javascript
nginx部署多个vue项目的方法示例
Sep 06 #Javascript
js实现简单的无缝轮播效果
Sep 05 #Javascript
You might like
PHP面向对象类型约束用法分析
2019/06/12 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
Vue编写多地区选择组件
2017/08/21 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
python中yield的用法详解
2021/01/13 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
调查研究项目计划书
2014/04/29 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
初中数学教学随笔
2015/08/15 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
使用feign服务调用添加Header参数
2021/06/23 Java/Android
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis