当用户/选项卡/浏览器处于非活动状态时 JavaScript 播放声音

Posted

技术标签:

【中文标题】当用户/选项卡/浏览器处于非活动状态时 JavaScript 播放声音【英文标题】:JavaScript play sound when user/tab/browser is inactive 【发布时间】:2016-02-19 21:37:58 【问题描述】:

当用户收到消息并且用户不在选项卡中时,我正在使用以下代码播放声音,这意味着当前选项卡处于非活动状态或用户位于当前选项卡之外。

$(window).hover(function(event) 
    if (event.fromElement) 
        console.log("inactive");
     else 
        console.log("active");
        beep("beep.wav", 1.0); //your code here
    
);

我只想在用户离开标签而不是在标签内时播放声音。现在,只有当用户返回选项卡时才会播放声音。这不是我想要的。

即使用户在另一个选项卡中,我也可以看到 facebook 和 gmail 这样做,他们是如何做到的?

我在 SO 上进行了搜索,但找不到任何答案!

帮帮我!

【问题讨论】:

【参考方案1】:

我想像这样:

var intervalHandler = null;

$(window).blur(function(e) 
  intervalHandler = window.setInterval(function() 
    document.getElementById('beep').play();
    window.clearInterval(intervalHandler);
  , 1000);
);
$(window).focus(function(e) 
  window.clearInterval(intervalHandler);
);
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>


<audio id="beep" src="http://www.soundjay.com/button/beep-07.wav" autostart="false" ></audio>

【讨论】:

【参考方案2】:

我自己发现的:

当用户标签处于活动状态时,它们会禁用声音:

var isactive = false;

function playSound()
    if (isactive) return;
    playWav...;


onNotificaitonComes = playSound;

$(window).focus(function()
    isactive = true;
).blur(function()
    isactive = false;
);

【讨论】:

以上是关于当用户/选项卡/浏览器处于非活动状态时 JavaScript 播放声音的主要内容,如果未能解决你的问题,请参考以下文章

如何在关闭浏览器选项卡或浏览器时插入数据[重复]

选项卡处于非活动状态时,jQuery setInterval太快

如何判断浏览器/选项卡是不是处于活动状态[重复]

Vuejs:当特定选项卡处于活动状态时是不是会发出事件(bootstrap-vue)

确定浏览器选项卡是不是处于活动状态? - IE?

当 UISearchController 处于活动状态并选择新选项卡时,UITableView 消失