mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-05-18 15:41:05 +00:00
84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
/*!
|
|
{
|
|
"name": "Audio Autoplay",
|
|
"property": "audioautoplay",
|
|
"authors": ["Jordy van Dortmont"],
|
|
"tags": ["audio"],
|
|
"async": true
|
|
}
|
|
!*/
|
|
/* DOC
|
|
Checks for support of the autoplay attribute of the audio element.
|
|
*/
|
|
define(['Modernizr', 'addTest', 'docElement', 'createElement', 'test/audio'], function(Modernizr, addTest, docElement, createElement) {
|
|
|
|
Modernizr.addAsyncTest(function() {
|
|
var timeout;
|
|
var waitTime = 200;
|
|
var retries = 5;
|
|
var currentTry = 0;
|
|
var elem = createElement('audio');
|
|
var elemStyle = elem.style;
|
|
|
|
function testAutoplay(arg) {
|
|
currentTry++;
|
|
clearTimeout(timeout);
|
|
|
|
var result = arg && arg.type === 'playing' || elem.currentTime !== 0;
|
|
|
|
if (!result && currentTry < retries) {
|
|
// Detection can be flaky if the browser is slow, so lets retry in a little bit
|
|
timeout = setTimeout(testAutoplay, waitTime);
|
|
return;
|
|
}
|
|
|
|
elem.removeEventListener('playing', testAutoplay, false);
|
|
addTest('audioautoplay', result);
|
|
|
|
// Cleanup, but don't assume elem is still in the page -
|
|
// an extension may already have removed it.
|
|
if (elem.parentNode) {
|
|
elem.parentNode.removeChild(elem);
|
|
}
|
|
}
|
|
|
|
// Skip the test if audio itself, or the autoplay element on it isn't supported
|
|
if (!Modernizr.audio || !('autoplay' in elem)) {
|
|
addTest('audioautoplay', false);
|
|
return;
|
|
}
|
|
|
|
elemStyle.position = 'absolute';
|
|
elemStyle.height = 0;
|
|
elemStyle.width = 0;
|
|
|
|
try {
|
|
if (Modernizr.audio.mp3) {
|
|
elem.src = 'data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';
|
|
}
|
|
else if (Modernizr.audio.wav) {
|
|
elem.src = 'data:audio/wav;base64,UklGRjQAAABXQVZFZm10IBAAAAABAAEAEAAAABAAAAABAAgAZGF0YRAAAAB/f39/f39/f39/f39/f39/';
|
|
}
|
|
else {
|
|
addTest('audioautoplay', false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
catch (e) {
|
|
addTest('audioautoplay', false);
|
|
return;
|
|
}
|
|
|
|
elem.setAttribute('autoplay', '');
|
|
elemStyle.cssText = 'display:none';
|
|
docElement.appendChild(elem);
|
|
// Wait for the next tick to add the listener, otherwise the element may
|
|
// not have time to play in high load situations (e.g. the test suite)
|
|
setTimeout(function() {
|
|
elem.addEventListener('playing', testAutoplay, false);
|
|
timeout = setTimeout(testAutoplay, waitTime);
|
|
}, 0);
|
|
});
|
|
});
|