2012-11-17 88 views
2

我得到一個異常:水豚騷靈phantomjs JavascriptError音頻

Capybara::Poltergeist::JavascriptError

而且調試輸出:

"args"=>[[{"message"=>"ReferenceError: Can't find variable: Audio"

Here's what I found when researching the error:

This issue is due to sencha 2.0 using phantomjs in order to resolve dependencies. Phantomjs does not support the HTML5 Audio API.

問題是:如何做我不理JavaScript錯誤爲JavaScript音頻類型時使用水豚/ poltergeist?

我試圖

visit "/" 
page.execute_script "var Audio= function(){ return { load: function(){}, play: function(){} } }" 

但錯誤是在訪問方法拋出。作爲git的文檔中指定here

我有同樣的問題,並嘗試使用像你描述的一個代碼按照你的方法,但不使用var所以這將是

回答

3

Phantomjs不支持Audio全球定義。

page.execute_script "Audio= function(){ return { load: function(){}, play: function(){} } }" 

我與檢查員page.driver.debug測試,它是在正確地phantomjs限定Audio,問題然後是,在需要之前它並沒有被執行。

因此,我的方法是添加一個檢查來驗證Audio是否在我的實際代碼中實際使用它之前定義的。這是我有的功能的一個例子:

getAudioObject = function(file_path){ 
    if (typeof Audio !== "undefined" && Audio !== null) { 
    audioObj = new Audio(file_path); 
    audioObj.loop = true; 
    return audioObj; 
    } 
} 

這是我的解決方案,它爲我工作。我希望這也能幫助你。

+0

我記得做了類似的事情。如果瀏覽器沒有定義它,我不會將我的音頻代碼放入if中,而是在我的代碼中全局定義一個空的Audio。但你的答案完全合法。謝謝 – nurettin

+0

謝謝。這有所幫助。 – Trip

0

要在任何資源腳本初始化之前正確定義全局變量,請使用「onInitialized」處理函數。

+0

是的,這適用於普通PhantomJS腳本,但我認爲這不適用於水豚。 –

相關問題