3

我遇到了一个例外:

Capybara::Poltergeist::JavascriptError

和调试输出:

"args"=>[[{"message"=>"ReferenceError: 找不到变量:音频"

这是我在研究错误时发现的:

这个问题是由于 sencha 2.0 使用 phantomjs 来解决依赖关系。Phantomjs 不支持 HTML5 音频 API。

问题是:如何在使用 capybara/poltergeist 时忽略 javascript Audio 类型的 javascript 错误?

我试过了

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

但是访问方法会抛出错误。

4

2 回答 2

3

Phantomjs 不支持此处Audiogit 文档中指定的内容

我遇到了同样的问题,并且还尝试使用您所描述的代码来遵循您的方法,但不使用var它将在全局范围内定义。

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;
  }
}

那是我的解决方案,它对我有用。我希望这对你也有帮助。

于 2013-05-08T22:40:49.630 回答
0

要在初始化任何资源脚本之前正确定义全局变量,请使用“onInitialized”处理程序。

于 2014-11-24T19:11:42.650 回答