Zombie.js和写入窗口的脚本

我在Zombie.js遇到一些麻烦,并且正在评估将东西写入windowvariables的脚本。 这里是一个例子来展示我的意思:

假设我有一个脚本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.foovariables可以用于页面的其余部分,但是看起来并不如此:

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

给我undefined

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

这对我来说并不完全合理,但是我会给它一个机会。 你有没有试过在一个普通的浏览器中运行这个,看看它在那里工作? 如果是这样,它可能是一个在zombie.js中的错误,你应该在其github文件中提交。

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

这就是说,虽然我没有直接回答这个问题,但我有两个build议可以帮你解决问题。

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

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

并在你的页面脚本,像这样

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

…没有保证,这将工作,但如果它不会肯定是一个在zombie.js中的错误,你可以将其作为一个问题,并希望得到修复。

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