vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法


Posted in Javascript onOctober 09, 2020

一、vue中解决chrome浏览器自动播放音频

需求

有新订单的时候,页面自动语音提示和弹出提示框;

问题

chrome浏览器在18年4月起,就在桌面浏览器全面禁止了音视频的自动播放功能。严格地来说,是Chrome不允许在用户对网页进行触发之前播放音频。不光是这样,在页面加载完毕的情况下,用户没有click、dbclick、touch等主动交互行为,使用js直接调用.play() 方法的话,chrome都会抛出如下错误:Uncaught (in promise) DOMException;

解决

在网上找了很多方法都不行,最后试出一种可行:语音播放显示出来才可以自动播放语音,如下图;

vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法

上代码:

//这里就是语音播放器,必须显示出来
<audio controls="controls" :src="sound" ref="audio"></audio>
//这里是调用语音播放
this.$refs.audio.currentTime = 0;
this.$refs.audio.play();

功能的全部代码:

<div>
 <v-btn color="lime lighten-1" @click="handleDispatch" small><v-icon left>mdi-account</v-icon>人工派单 </v-btn>
 //这里就是语音播放器,必须显示出来
 <audio controls="controls" :src="sound" ref="audio"></audio>
</div>

<script>
//语音的路径(这样引入是方便打包上传,下面有介绍)
import sounds from '@/assets/sound/1.mp3';
export default {
 data() {
 return {
 sound: sounds,
}
 }
mounted() {

//这是列表的分页查询
 this.getLinePageWithParams();

//这里因为后端没使用websocket,就1分钟循环调用一次;
 this.timer = setInterval(() => {
 this.newOreder();
 }, 60000);
 },

 methods: {
 newOreder() {
 api.main.op_order_existNewOrder_get().then(res => {
  if (res.data.success) {




//res.data.data后端返回的是否有新订单,有:true; 没有:false
  if (res.data.data) {
  this.$refs.audio.currentTime = 0;
  this.$refs.audio.play();
  // element ui 右上角提示窗
  this.$notify({
  title: '新订单',
  message: '您有新的订单待处理',
  });
  this.getLinePageWithParams();
  }
  }
  return res;
 })
 .catch(() => {});
 },
}

二、MP3文件上传到线上,webpack打包丢失

vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法

去看webpack.config.js文件的配置,这里MP3会打包到media文件,但是没生成;

{
 test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
 use: [
  {
  loader: 'url-loader',
  options: {
  limit: 4096,
  fallback: {
  loader: 'file-loader',
  options: {






   name: 'media/[name].[hash:8].[ext]',
  },
  },
  },
  },
 ],
 },

最后去看webpack官方文档,解决是要在使用语音的地方,当模块import引入,才会打包;

<script>
//语音的路径(当模块引入,webpack好将MP3打包)
import sounds from '@/assets/sound/1.mp3';
export default {
 data() {
 return {
 sound: sounds,
}
 }

最后就打包成功

vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法

最后看到一种,直接URL使用百度播报,我没试过o.o 他的微博:以下代码来自https://www.cnblogs.com/gfweb/p/11726365.html

1,在工具文件夹utils,创建一个js文件 (voicePrompt.js)

function voicePrompt (text){
 new Audio('http://tts.baidu.com/text2audio?cuid=baiduid&lan=zh&ctp=1&pdt=311&tex=' + text).play();
}
 
export {
 voicePrompt
}

2在min.js

import * as voicePromptFun from './utils/voicePrompt' 
Vue.prototype.voicePrompt = voicePromptFun.voicePrompt //语音提醒

3在其他页面调用

this.voicePrompt('皮卡丘');

到此这篇关于vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法的文章就介绍到这了,更多相关vue chrome浏览器自动播放音频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用javascript实现分割提取页面所需内容
May 09 Javascript
style、 currentStyle、 runtimeStyle区别分析
Aug 01 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
浅析js封装和作用域
Jul 09 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
Mar 05 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
解决Angular4项目部署到服务器上刷新404的问题
Aug 31 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
在layui tab控件中载入外部html页面的方法
Sep 04 Javascript
JS script脚本中async和defer区别详解
Jun 24 Javascript
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
vue实现选中效果
Oct 07 #Javascript
electron踩坑之dialog中的callback解决
Oct 06 #Javascript
electron踩坑之remote of undefined的解决
Oct 06 #Javascript
9个JavaScript日常开发小技巧
Oct 06 #Javascript
详解ES6中class的实现原理
Oct 03 #Javascript
在vue中使用Echarts画曲线图的示例
Oct 03 #Javascript
vue 虚拟DOM的原理
Oct 03 #Javascript
You might like
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
js验证上传图片的方法
2015/05/12 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
培训演讲稿范文
2014/01/12 职场文书
军训自我鉴定范文
2014/02/13 职场文书
大学生求职信怎么写
2015/03/19 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js