<audio> と <video> を preload="none" で使用し、Javascript から再生しようとすると、Firefox と Chrome で異なる結果が得られます。
preload="auto" または preload="metadata" を使用していたとしましょう:
audio.src = "filename";
audio.play();
Firefox と Chrome の両方で問題なく動作するようですが、preload="none" を使用してから Chrome dossent play を使用したいと考えています。
だから私は preload="none" でこのコードを試しています:
audio.src = url;
audio.load();
audio.addEventListener('canplay', function(e) {
audio.play(); // For some reason this dossent work in Firefox
}, false);
audio.play(); // Added this so Firefox would play
それが正しい方法かどうかはわかりません。
使用しています:Firefox 20.0.1 Chrome 25.0.1364.172 m
デモを作りました : http://netkoder.dk/test/test0217.html
編集 :
2 番目のオーディオ プレーヤー (デモ ページ) では、preload="none" を使用する場合、load() を使用する必要があるようです。しかし、 load() の直後に play() を使用するのは正しいですか、それともイベントを使用してファイルがロードされるのを待ってから再生するのが正しい方法ですか?
3 番目のオーディオ プレーヤーでは、addEventListener() と一緒に使用すると、Firefox 20.0.1 が canplay イベントを正しくサポートしていないようです。 canplayが機能する方法になります。.oncanplay を使用すると機能します。
したがって、次のコードが機能するようです:
function afspil2(url) {
afspiller2.src = url;
afspiller2.load(); // use load() when <audio> has preload="none"
afspiller2.play();
}
function afspil3(url) {
afspiller3.src = url;
afspiller3.load(); // use load() when <audio> has preload="none"
//afspiller3.addEventListener('canplay', function() { // For some reason this dossent work correctly in Firefox 20.0.1, its triggers after load() and when scrubbing
// afspiller3.play();
//}, false);
afspiller3.oncanplay = afspiller3.play(); // Works in Firefox 20.0.1
}
変更を含めるようにデモを更新しました: http://netkoder.dk/test/test0217.html
afspil3() 関数 dossent 内に addEventListener を追加する私の方法は、最初に関数が呼び出されたときに addEventListener 内のコードが 1 回呼び出されるため、良いようです。関数が 2 回目に呼び出されると、addEventListener 内のコードが 2 回呼び出され、次に 3 回呼び出されます。