我在使用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是否将脚本评估到不同的上下文中,而上下文与运行页面的上下文不同?
答案 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中的一个错误,你可以将其作为一个问题提出并希望将其修复。