基于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 offsetX与layerX区别
Mar 12 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
浅谈Vue父子组件和非父子组件传值问题
Aug 22 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
微信小程序带动画弹窗组件使用方法详解
Nov 27 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
vue 中的 render 函数作用详解
Feb 28 Javascript
js实现九宫格抽奖
Mar 19 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
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
JS重要知识点小结
2011/11/06 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python 不以科学计数法输出的方法
2018/07/16 Python
tensorflow自定义激活函数实例
2020/02/04 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
python爬取微博评论的实例讲解
2021/01/15 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
HTML5有哪些新特征
2015/12/01 HTML / CSS
办护照工作证明范本
2014/01/14 职场文书
文艺晚会主持词
2014/03/24 职场文书
受伤赔偿协议书
2014/09/24 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
党员承诺书格式范文
2015/04/28 职场文书
阿甘正传观后感
2015/06/01 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
ant design charts 获取后端接口数据展示
2022/05/25 Javascript