2015-02-08 69 views
1

我有一個網頁index.php其中包含一個鏈接到sound.php。在sound.php上,使用SoundJS播放聲音。離開帶有SoundJS的網頁會導致谷歌瀏覽器崩潰

當我從導航到sound.phpindex.php,谷歌Chrome通常(但並不總是)顯示錯誤消息( 「喔唷,崩潰啦!」): https://support.google.com/chrome/answer/95669?hl=en

我使用Chrome 40爲Mac OS。無論我使用鏈接還是瀏覽器的後退按鈕都無關緊要。

這裏是我的代碼:

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和其他瀏覽器中音頻播放效果不錯。

+0

這聽起來像一個問題,更與Chrome的處理您的聲音設置。 「Aw,Snap!」就像是Chrome中的錯誤並且認真對待,因此請在Chromium bug跟蹤器中提交錯誤報告。 – apscience 2015-02-08 23:11:31

+2

我能夠使用[SoundJS音頻測試套件](http://www.createjs.com/#!/Demos/SoundJS/Audio-Test-Suite)在Chrome 40 OSX中始終如一地通過啓動一些循環聲音來重現此操作然後點擊後退按鈕。雖然重新啓動Chrome後,我不能再生產。這表明它可能與記憶有關。也許Chrome for WebAudio的GC有一個崩潰錯誤?可能值得向他們提交一個錯誤。 – gskinner 2015-02-08 23:57:52

+0

這似乎是在Chrome 40.0.2214.115的最新版本中解決的問題 – OJay 2015-02-19 18:33:05

回答

3

正如gskinner指出的那樣,該問題可以在其他網站上覆制。它也可以在僅使用單個音頻資源的頁面上再現。

這個問題是特定於Chrome 40(或至少非常新版本的Chrome)。它並不特定於某些版本的SoundJS。

使用其他瀏覽器似乎是唯一的解決方案。

+1

這似乎是相關的: http://stackoverflow.com/questions/28393885/why-would-my-app-crash-in-chrome-if-i-refresh-a-few-times/28458945#28458945 – OJay 2015-02-11 17:44:51

+1

這似乎已在最新版本的Chrome 40.0.2214.115中修復 – OJay 2015-02-19 18:27:37

0

當頁面失去焦點時,chrome減少了頁面可用資源的數量。通常情況下,這並不是什麼大不了的事情,但是當你處理聲音時,它可能會導致一些非常奇怪的行爲。

您可以通過window.onblur檢測頁面何時失去焦點。當窗口失去焦點時,您應該嘗試減少javascript所使用的資源。如果這有效,你找到了你的罪魁禍首。如果沒有,你應該向谷歌提交一個錯誤報告。

+0

您是否假設兩個頁面同時打開?事實並非如此。所有頁面在相同的窗口/選項卡中打開。所以當我點擊index.php的鏈接時,sound.php就關閉了,根本不應該使用任何資源。 – Pida 2015-02-08 23:22:48

0

這似乎是固定在新的Chrome發佈40.0.2214.115,但OJay here做了變通方法幫助我之前解決這個問題,以此Chrome修復:

var isChrome40 = navigator && navigator.userAgent && 
navigator.userAgent.match("40.0.2214.111"); 
if (isChrome40) { 
    createjs.Sound.registerPlugins([createjs.HTMLAudioPlugin]); 
}` 
相關問題