2

XMLHttpRequest を使用して、ゲームのファイルをプリロードします。WebAudio がサポートされていない場合は、オーディオ要素の使用に戻ります。

Android では、Firefox では問題なく動作しますが、Chrome ではサウンドが再生されません。ここにいくつかのテストコードがあります:

document.addEventListener('touchstart', function(event) {
    event.preventDefault();
    if( window.audio ) window.audio.play();
    console.log( window.audio );
});

window.audio    = null;


var xhr = new XMLHttpRequest();
xhr.open('GET', '/sounds/shotgun.webm', true);
xhr.responseType = 'arraybuffer';

xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        var blob = new Blob( new Array( new Int8Array( xhr.response ) ), { type: 'audio/webm' } );
        var url = window.URL.createObjectURL( blob )
        window.audio = new Audio();
        window.audio.src = url;

        console.log( 'sound loaded' );
    }
    };

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send();

これは、オブジェクト URL に関する Chrome for android の問題であると思われます...

とにかく、XMLHttpRequest からキャッシュされたデータを使用して、Chrome for Android でサウンドを再生する方法を探しています。

4

2 に答える 2

3

これは実際にはバグのようです。https://code.google.com/p/chromium/issues/detail?id=227476で取り上げ、テスト ケースを作成しました。休暇から戻ったら、まだトリアージされていない場合は、適切なチームに割り当てます。他の回避策が見つかった場合は、この回答も更新します。

于 2013-04-08T04:14:39.967 に答える
0

私は手元に Android フォンを持っていませんが、以前window.webkitURLwindow.URL. 多分試してください:

( window.URL || window.webkitURL ).createObjectURL( blob )

于 2013-04-02T18:35:05.173 に答える