1

JavaScriptを介してオーディオを使用するHTML5Webページがあります。正しいオーディオファイル(たとえば、oggとmp3など)をロードし、そのファイルからスプライトを正しく再生する基本バージョンがあります。この基本バージョンにはjavascriptファイルが1つしかなく、OSX(Safari、Chrome、Firefox)、iOS 5および6(Safari)、Windows 7(Firefox、Chrome)、およびAndroid4.2(Firefox)。

コードを取得して、製品版に挿入します。これで、HTMLページは他の多くのJavaScriptファイル(jquery、jquery ui、flotなど)をロードします。ただし、すべてのオーディオコードは、を介して含まれる単一のファイルに含まれています

<script src="/foo/bar/sound.js"></script>. 

どちらの場合も、sound.jsのコードは、ユーザーがボタンをクリックすることで呼び出されます。上記のすべてのプラットフォーム/ブラウザの組み合わせで、組み合わせたコードはiOSを除いて機能します(iPad2とiPad3の両方でiOS 5と6でテスト済み)。私が得ているエラーは

INVALID_STATE_ERR: DOM Exception 11: An attempt was made to use an object that is not, or is no longer, usable.

これは、必要な特定のスプライトに基づいてmySound.currentTimeを設定しようとする行で発生します。

mySound.currentTime = spriteData[currentSound].start;

mySoundは私のサウンドオブジェクトであり、spriteDataは正しいです。奇妙なことに、実際のiPadで失敗する同じコードは、iOS5とiOS6のどちらをシミュレートするかに関係なく、iOSSimulatorで問題なく機能します。

この状況をデバッグするにはどうすればよいですか?私はどこを見れば何を試すべきか途方に暮れています。任意の提案をいただければ幸いです。

4

2 に答える 2

0

私はついに解決策を見つけました。すべてのプラットフォームで、以下はスタンドアロンコードで機能しますが、本番ページの残りの部分と組み合わせると、iOS(iOS 6.1でも)で失敗します。

audioSprite = document.createElement('audio');
audioSprite.setAttribute("src","/foo/bar/file.xxx");

ここで、xxxは、ブラウザが処理できる内容に応じて、mp4、ogg、wav、またはmp3です。

これらの2行を変更し、他のすべてを同じに保つことは、本番ページのiOSで次のように機能します。

audioSprite = new Audio('http://example.com/foo/bar/file.xxx');

2番目のバージョンが機能し、最初のバージョンが機能しない理由はまだわかりません。

于 2013-01-31T17:29:26.550 に答える
0

Mobile Safari には、Mac 上の Safari からアタッチできる開発者モードがあります。Safari Web コンテンツ ガイド: iOS での Web コンテンツのデバッグを参照してください。

また、式を分割して、エラーの原因となっているビットを確認することもできます。

var t = spriteData[currentSound].start;
mySound.currentTime = t;
于 2013-01-27T22:06:31.853 に答える