2012-05-07 154 views
1

我正在转换一些HTML5与Android一起工作。 Android不支持该元素,所以play方法不起作用。html5音频元素返回src与jquery

我正在使用PhoneGap的媒体元素,并且播放音频。我想要的是找到音频标签的第一个来源,然后将其用于媒体播放,但这似乎不起作用。

function playSound(whatToPlay) { 
    // removed since <audio does not work 
    // var snd = document.getElementById(whatToPlay); 
    // snd.play(); 

    toPlaySrc = $("#"+whatToPlay+":first-child").eq(0).attr("src"); 
    // next I will have to deal with /android_asset and my current partial path 
    myMedia = new Media("/android_asset/"+toPlaySrc, onSuccess,onError); 
    if (myMedia) 
     myMedia.play();   
} 
playSound("clockticking"); 

这是我的音频元素。

<audio id="clockticking" preload="auto" autobuffer onEnded="instructionFinsihed()"> 
    <source src="../sound/tictoc.mp3" type="audio/mp3" /> 
    <source src="../sound/tictoc.ogg" type="audio/ogg" /> 
</audio> 

我有很多现有的音频元素,所以一般的解决办法真的很重要,我不能,例如只是广告ID代码应用到所有的MP3元素并加以解决。

+0

我正在研究一个小的lib,您可以将其添加到Cordova/PhoneGap Android来修复像这样的修补程序问题。我会及时向大家发布。 –

+0

谢谢!我相信我不能成为这个问题唯一的一个。 – nycynik

回答

1

好的,我正在研究Android WebView的一些猴子补丁代码,您可以在我的corinthian github project上看到进度。在你想要做什么,同时是设置一个上deviceready听众:

document.addEventListener("deviceready", monkeypunch, true); 

创建一个数组来保存的媒体对象:

mediaObjs = []; 

,并在加藤一彦方法,你会怎么做:

function monkeypunch() { 
    var audioclips = document.getElementsByTagName("audio"); 
    for (var i=0; i < audioclips.length; i++) { 
     // Create new Media object. 
     var audioSrc = audioclips[i].firstElementChild.src; 
     if (audioSrc.indexOf("file:///android_asset") == 0) { 
      audioSrc = audioSrc.substring(7); 
     } 
     mediaObjs[audioSrc] = new Media(audioSrc); 
     // Create the HTML 
     var newAudio = document.createElement('div'); 
     var newImg = document.createElement('img'); 
     newImg.setAttribute('src', 'images/play.png'); 
     newAudio.appendChild(newImg); 
     // Set the onclick listener 
     newAudio.addEventListener("click", function() { 
      // figure out what image is displayed 
      if (newImg.src.indexOf("images/play.png", newImg.src.length - "images/play.png".length) !== -1) { 
       newImg.src = "images/pause.png"; 
       mediaObjs[audioSrc].play();    
      } else { 
       newImg.src = "images/play.png"; 
       mediaObjs[audioSrc].pause();     
      } 
     }); 
     // replace the audio tag with out div 
     audioclips[i].parentNode.replaceChild(newAudio, audioclips[i]); 
    } 
} 

你可以从我的github项目中获取播放/暂停图像。我计划在我有更多时间时添加更多功能。

+0

现在试一试,谢谢。 – nycynik