Zombie.js和写入窗口的脚本
我在Zombie.js
遇到一些麻烦,并且正在评估将东西写入window
variables的脚本。 这里是一个例子来展示我的意思:
假设我有一个脚本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
variables可以用于页面的其余部分,但是看起来并不如此:
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 ,它做同样的事情,更受欢迎:)