4

ゲームに読み込み進行状況バーを表示しようとしていますonloadeddata。オーディオの属性に関数を割り当てていますが、Chrome でトリガーされません。他のブラウザでも動作します。oncanplayoncanplaythrough、などの他の多くのイベントも試しましたがonloadedmetadata、どれもトリガーしません。

キャッシングが関係している可能性が高いと思います。調べてみると、2〜3年前からいくつかの報告がありましたが、最近は何も報告されていません.

オーディオがロードされているかどうかを検出したり、これらのイベントを機能させたりする他の方法はありますか?

編集: ここに簡単な例があります: http://jsfiddle.net/3vxCu/1/ Opera と Firefox で動作しますが、Chrome では動作しません。ロードが完了すると、音が鳴ったときに警告を発するはずです。

4

2 に答える 2

8

onloadeddata何らかの理由でプロパティが機能していないようです。ただし、イベント ハンドラーをaddEventListener(または jQuery 経由で) 接続すると機能します: http://jsfiddle.net/3vxCu/4/

bgSound = new Audio();
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.preload = "auto";
// Standard browsers (not IE before version 9):
// bgSound.addEventListener("loadeddata", testFunction, false);

// jQuery:
$(bgSound).on("loadeddata", testFunction);

function testFunction () {
    alert("Data loaded");
}
于 2012-05-28T23:04:59.697 に答える
3

添付のjsfiddleがコードの実装方法である場合、何が問題なのかがわかると思います。

あなたのjsfiddleショー:

bgSound = document.createElement('audio');
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.onloadeddata = testFunction;

function testFunction(){
    alert("Data loaded");
}

次のようになります。

bgSound = document.createElement('audio');
bgSound.onloadeddata = testFunction; // Event listener is attached _before_ loading the resource
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";

function testFunction(){
    alert("Data loaded");
}

基本的には を指定してからイベントリスナーをアタッチしてますsrc。ソースの指定は、すべてを開始するため、最後に行う必要があります。Chrome は、コードにアタッチされるまでに、そのイベントのリスナーを呼び出す時点をすでに過ぎている可能性があります。

于 2012-05-28T23:00:51.397 に答える