基于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 相关文章推荐
用javascript父窗口控制只弹出一个子窗口
Apr 10 Javascript
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
js数组的操作详解
Mar 27 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
node.js中的fs.mkdirSync方法使用说明
Dec 17 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
el-select数据过多懒加载的解决(loadmore)
May 29 Javascript
vue实现拖拽效果
Dec 23 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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JSONP之我见
2015/03/24 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
python单例模式实例分析
2015/04/08 Python
python 连接sqlite及简单操作
2017/06/30 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
家长会邀请书
2014/01/25 职场文书
进步之星获奖感言
2014/02/22 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
社区母亲节活动总结
2015/02/10 职场文书
办公室管理规章制度
2015/08/04 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
Python实现信息管理系统
2022/06/05 Python
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python