Zombie.js和写入窗口的脚本

时间:2012-11-05 19:22:50

标签: javascript node.js jasmine zombie.js

我在使用Zombie.js时遇到了一些问题,并评估了将内容写入window变量的脚本。这是一个显示我的意思的例子:

假设我有一个脚本foo.js执行以下操作:

window.foo = 'foo';

然后我使用zombie.js访问以下html页面(包括foo.js):

HTML

<!DOCTYPE html>

 <html>
 <head>
   <title>zombiejs test </title>
   <script type="text/javascript" src="foo.js"></script>
 </head>
 <body>
    <script type="text/javascript">
      console.log(window.foo);
    </script>
 </body>
 </html>

我会假设在执行foo.js后,window.foo变量可用于页面的其余部分,但似乎不是运行时的情况:

Browser.visit('http://localhost:8087/test.html')

给了我undefined

这是否有任何特殊原因或我在这里做错了什么? Zombie.js是否将脚本评估到不同的上下文中,而上下文与运行页面的上下文不同?

1 个答案:

答案 0 :(得分:3)

这对我来说并不完全有意义,但我会试一试。您是否尝试在普通浏览器中运行此操作并查看它是否在那里工作?如果是,则可能是zombie.js中的错误,您应该在its github issues中提交。

简要地浏览一下这些问题,我看到一些已经打开的与窗口对象相关的内容,可能值得一看。例如,https://github.com/assaf/zombie/pull/360

话虽如此,虽然我没有直接回答这个问题,但我有两条建议可以帮助您解决问题。

  • 在页面脚本中使用文档就绪处理程序,在外部脚本中使用可调用函数。所以在foo.js中,它看起来像这样:

    window.foo_value = function(){return'foo'};

并在您的页面脚本中,像这样

<script>
  window.onload(function(){ console.log(window.foo_value) });
</script>

...不保证这会起作用,但是如果它不起作用肯定会是zombie.js中的一个错误,你可以将其作为一个问题提出并希望将其修复。

  • 使用PhantomJS,它做同样的事情并且更受欢迎:)