1

我有一个网页index.php,其中包含指向sound.php. On sound.php,使用 SoundJS 播放声音。

当我从 导航sound.php到 时index.php,谷歌浏览器通常(但并非总是)显示一条错误消息(“噢,快!”): https ://support.google.com/chrome/answer/95669?hl=en

我正在使用适用于 Mac OS 的 Chrome 40。不管我是使用链接还是浏览器的后退按钮。

这是我的代码:

sound.php调用一个使用 SoundJS 的 JS 函数:

<script type="text/javascript">      
  var int = [0, 7];
  prepareAudio();  
</script>

一旦我删除了这段代码,浏览器就不会再崩溃了。

prepareAudio() 在一个外部文件中:

function prepareAudio() {   

  // Try WebAudio or HTMLAudio
  createjs.Sound.initializeDefaultPlugins();

  // Try flash otherwise
  if (!createjs.Sound.isReady()) {
    // Flash plug-in is not default
    createjs.FlashPlugin.swfPath = "../audio/";

    // Enable flash support
    $.getScript("../../js/flashplugin-0.6.0.min.js");

    // Prefer WebAudio over HTMLAudio. Prefer HTMLAudio over Flash.
    createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashPlugin]);
    }

  // Get audio files
  var audioPath = "../audio/";

  var manifest = [];
  for (var i = 0; i< audioFiles.length; i++)
    manifest.push({id: audioFiles[i], src: audioPath + audioFiles[i] + ".ogg"});

  // Play audio 
  var queue = new createjs.LoadQueue(); 
  createjs.Sound.alternateExtensions = ["mp3"];
  queue.installPlugin(createjs.Sound);
  queue.addEventListener("complete", function() {playTask(int);});
  queue.loadManifest(manifest);
  createjs.Sound.registerSounds(manifest, audioPath);
}

涉及更多代码。我使用播放声音

  createjs.Sound.play(mySound); 

在 Chrome 和其他浏览器中可以正常播放音频。

4

3 回答 3

3

正如 gskinner 所指出的,该问题可以在其他网站上重现。它也可以在仅使用单个音频资源的页面上复制。

该问题特定于 Chrome 40(或至少是最新版本的 Chrome)。它并不特定于某些版本的 SoundJS。

使用其他浏览器似乎是唯一的解决方案。

于 2015-02-11T11:20:40.940 回答
0

当页面失去焦点时,chrome 会减少页面的可用资源量。通常,这没什么大不了的,但是当您处理声音时,它可能会导致一些非常奇怪的行为。

您可以使用window.onblur. 当窗口失去焦点时,您应该尝试减少 javascript 使用的资源。如果这行得通,你就找到了罪魁祸首。如果没有,您可能应该向 google 提交错误报告。

于 2015-02-08T23:11:31.650 回答
0

它似乎已在新的 Chrome 版本 40.0.2214.115 中得到修复,但 OJay在这里完成的解决方法帮助我在此 Chrome 修复之前克服了这个问题:

var isChrome40 = navigator && navigator.userAgent &&
navigator.userAgent.match("40.0.2214.111");
if (isChrome40) {
    createjs.Sound.registerPlugins([createjs.HTMLAudioPlugin]);
}`
于 2015-02-19T18:34:48.657 回答