2012-04-19 9 views
2

私自身のHTML5オーディオプレーヤーを作成しようとしています。それは、hereで覗くことができます。HTML5 Audio Safariの問題

それは私はそれだけで再生する前に、NaNの期間データを表示する

audio.addEventListener("loadedmetadata", tryThis, false); 

のために耳を傾けているにもかかわらず、何らかの理由でIE9、FF、Chromeの罰金が、Safariで動作します。

audio.setAttribute("src", a[trackNo][1]); 
audio.load(); 
audio.addEventListener("loadedmetadata", tryThis, false); 

function tryThis() 
{ 
    this.addEventListener("timeupdate", function() { document.getElementById(radioPointer.toString()).innerHTML = formatTime(this.duration, this.currentTime);}, false); 

    this.addEventListener("ended", function() { document.getElementById(radioPointer.toString()).innerHTML = formatTime(this.duration, 0); document.rootsPlaylist.roots[radioPointer].checked = false; }, false); 

    this.play();  
} 

<audio id="rootsPlayer" style="display:none;"></audio> 

あなたは任意のヘルプをしてくださいますか?

多くのありがとうございます。

注:私が何を意味するかを見るためには、頻繁に曲を弾く必要があります。申し訳ありませんが、これについて言及していませんでした。

+0

クイックフィックスしてますisNaN()をチェックすることです/ Reference/Global_Objects/isNaN 次に、durationを00:00に設定するか、trueの場合は別のデフォルト値を設定します。 – bcmoney

+0

はい、これを試しましたが、それは私が行っているスタイルではありません。共有していただきありがとうございます。 – iTEgg

+0

もう一度入力していただきありがとうございます。それを考えて、シンプルに保つためにisNan()を採用しました! – iTEgg

答えて

0

durationのプロパティは、durationchangeイベントが発行された後にのみ初期化されるためです。だから、あなたはどちらかisNan()機能またはいくつかのダミー変数durationInitialized使用することができます。 https://developer.mozilla.org/en/JavaScript:私が使用したこと、このために

var durationInitialized = 0; 
audio.setAttribute("src", a[trackNo][1]); 
audio.load(); 
audio.addEventListener("loadedmetadata", tryThis, false); 
audio.addEventListener("durationchange", function() {durationInitialized = 1;}, false); 
function tryThis() { 
this.addEventListener("timeupdate", function() { 
    var time = ''; 
    if (durationInitialized) time = formatTime(this.duration, this.currentTime); 
    else time = formatTime(this.currentTime); 
    document.getElementById(radioPointer.toString()).innerHTML = time; 
}, false); 

this.addEventListener("ended", function() { 
    var time = ''; 
    if (durationInitialized) time = formatTime(this.duration, 0); 
    else time = formatTime(0); 
    document.getElementById(radioPointer.toString()).innerHTML = time; 
    document.rootsPlaylist.roots[radioPointer].checked = false; 
}, false); 

this.play();  
}