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

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

相关文章

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3