在微信及支付宝下的音频自动播放

2024-02-21 15:18

本文主要是介绍在微信及支付宝下的音频自动播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

废话不多说,直接上代码。

 

// 微信、支付宝音频Hack方案
; void function (win, doc, undefined) {// 原理:调用链中的某个事件被标识为用户事件而非系统事件// 进而导致浏览器以为是用户触发播放而允许播放Audio.prototype._play = Audio.prototype.play;HTMLAudioElement.prototype._play = HTMLAudioElement.prototype.play;function wxPlay(audio) {/// <summary>/// 微信播放Hack/// </summary>/// <param name="audio" type="Audio">音频对象</param>WeixinJSBridge.invoke('getNetworkType', {}, function (e) {audio._play();});}function alipayPlay(audio) {/// <summary>/// 支付宝播放Hack/// </summary>/// <param name="audio" type="Audio">音频对象</param>AlipayJSBridge.call('getNetworkType', function (result) {audio._play();});}function play() {var self = this;self._play();try {wxPlay(self);} catch (ex) {document.addEventListener("WeixinJSBridgeReady", function evt() {wxPlay(self);document.removeEventListener("WeixinJSBridgeReady", evt, false);}, false);}try {alipayPlay(self);} catch (ex) {document.addEventListener('AlipayJSBridgeReady', function evt() {alipayPlay(self);document.removeEventListener("AlipayJSBridgeReady", evt, false);}, false);}}Audio.prototype.play = play;HTMLAudioElement.prototype.play = play;
}(window, document);

 

 

起因:

        在IOS及Android中无法自动播放音频(出于流量和用户体验的考虑,所以用JS直接调用play是无效的)。

        但是产品们却要求必须打开页面就播放声音,这可难倒了很多人。

        那么我们首先要知道什么情况下调用play函数是有效的,什么时候是无效的。

 

var audio = new Audio("xxx.mp3");audio.play(); // 无效document.body.onclick = function(){audio.play(); // 有效
};

        从上面的代码中可以看出,只有用户事件中触发play函数才有效。

 

        什么是用户事件?click事件、touch事件、mouse事件以及keyboard事件等必须用户手动触发的事件为用户事件。

 

解决原理:

        既然是用户事件才会触发,那我们有没有办法模拟一个用户事件?

        答案是肯定的,由于微信、支付宝有扩展API,而此类API是直接内嵌入Js中的,这时Js会把这些内容当成是用户手动触发的内容。

        所以我们就可以利用这个来达到效果。

        首先将原生的play函数保存下来,然后重写Audio以及HTMLAudioElement原型中的play函数。

        接下来是重点,我们要调用一个不会产生任何影响的应用扩展函数,并在回调函数中触发play。

        仔细看了一下微信以及支付宝中的接口,发现获取网络信息的接口最符合,因为即使失败了也会调用回调,而且没有任何不良影响。

 

总结:

       有时候解决问题的方法有很多,只要能解决问题的方法就是好方法。

这篇关于在微信及支付宝下的音频自动播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732218

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的

微信小程序uniappvue3版本-控制tabbar某一个的显示与隐藏

1. 首先在pages.json中配置tabbar信息 2. 在代码根目录下添加 tabBar 代码文件 直接把微信小程序文档里面的四个文件复制到自己项目中就可以了   3. 根据自己的需求更改index.js文件 首先我这里需要判断什么时候隐藏某一个元素,需要引入接口 然后在切换tabbar时,改变tabbar当前点击的元素 import getList from '../

微信小程序(一)数据流与数据绑定

一、单向数据流和双向数据流 1、单项数据流:指的是我们先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面 优点:数据跟踪方便,流向单一,追寻问题比较方便【主要体现:微信小程序】。 缺点:就是写起来不太方便,如果修改UI界面数据需要维护对应的model对象 2、双向数据流:值和UI是双向绑定的,大家都知道,只要UI里面的值发生

微信小程序学习网站

小程序--柯神博客 http://www.cnblogs.com/nosqlcoco 案例地址: https://github.com/cocoli/weixin_smallexe/tree/master/weixin_demo/pages/component/uploadfile

分享一个基于uniapp科技馆服务微信小程序 博物馆管理小程序(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流! 💕💕学习资料、程序开发、技术解答、文档报告 💕💕如需要源码,可以扫取文章下方二维码联系咨询 💕💕Java项目 💕💕微信小程序项目 💕💕Android项目 �

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

1-3 微信小程序协同工作和发布

协同工作和发布 🥟🥞以权限管理需求为例 一个项目组,一般有不同的岗位,不同角色的员工同时参与项目成员 流程 成员管理的两个方面 不同项目成员对应的权限 版本

Deepin Linux 下安装微信

在下载和运行这个项目之前,你需要在电脑上安装Git和Node.js (来自npm)。在命令行中输入: 安装Git和nodejs 命令:sudo apt-get install git  sudo apt-get install nodejs 执行完上面命令之后运行下面命令 # 下载仓库 git clone https://github.com/geeeeeeeeek/elec