基于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 相关文章推荐
从零开始学习jQuery (二) 万能的选择器
Oct 01 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
30分钟快速掌握Bootstrap框架
May 24 Javascript
Bootstrap插件全集
Jul 18 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
Feb 22 Javascript
微信小程序进入广告实现代码实例
Sep 19 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 Javascript
微信小程序canvas动态时钟
Oct 22 Javascript
在项目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 cookie名使用点号(句号)会被转换
2014/10/23 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python实现两张图片的像素融合
2019/02/23 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python爬虫容易学吗
2020/06/02 Python
大学生毕业自我评价范文分享
2013/11/07 职场文书
运动会广播稿30字
2014/01/21 职场文书
统计岗位职责
2014/02/21 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
大学老师推荐信
2014/02/25 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL