1

我在Zombie.js评估将内容写入window变量的脚本时遇到了一些麻烦。这是一个例子来说明我的意思:

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

window.foo = 'foo';

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

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>

我会假设window.foo在执行 foo.js 后该变量可用于页面的其余部分,但似乎情况并非如此:

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

给我undefined

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

4

1 回答 1

3

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

简要浏览问题,我看到一些已经打开的与窗口对象相关的问题,可能值得看一下。例如,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,它做同样的事情并且更受欢迎:)
于 2012-11-05T20:58:21.210 回答