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 相关文章推荐
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
Aug 20 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
Angular2中select用法之设置默认值与事件详解
May 07 Javascript
vue弹窗消息组件的使用方法
Sep 24 Javascript
jQuery判断自定义属性data-val用法示例
Jan 07 jQuery
Vue数据绑定实例写法
Aug 06 Javascript
react antd实现动态增减表单
Jun 03 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 Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
高三毕业典礼主持词
2014/03/27 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
MySQL分布式恢复进阶
2022/07/23 MySQL
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers