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 相关文章推荐
js实现按钮颜色渐变动画效果
Aug 20 Javascript
jquery实现倒计时功能
Dec 28 Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
JavaScript中创建原子的方法总结
Aug 26 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
js canvas实现橡皮擦效果
Dec 20 Javascript
解决Vue watch里调用方法的坑
Nov 07 Javascript
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基础知识:控制结构
2006/12/13 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
为什么使用接口?
2014/08/13 面试题
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
乡镇民主生活会发言材料
2014/10/20 职场文书
党员民主评议个人总结
2014/10/20 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
高一作文之暖冬
2019/11/09 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS