| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*!
- {
- "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);
- });
- });
|