javascript - Zombie.js 和写入窗口的脚本

标签 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 是否将脚本评估为不同的上下文,该上下文与运行页面的上下文不同?

最佳答案

这对我来说完全没有意义,但我会试一试。您是否尝试过在普通浏览器中运行它并查看它是否在那里工作?如果是这样,则可能是 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 , 它做同样的事情并且更受欢迎:)

关于javascript - Zombie.js 和写入窗口的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238889/

相关文章:

node.js - 如何终止已停止的forever.js 守护进程?

angularjs - 模拟 document.referrer Angular Jasmine

javascript - Jasmine - 在串联的所有 block 之前运行

JavaScript 和 Node.js RESTful Web 应用程序

javascript - 通过 GetElementsbyClass 内的标签在 GetElementbyID 嵌套的 dom 元素内获取元素

node.js - Socket.io、Node.js 和 rethinkdb

php - 如何从单独的脚本轮换 Winston 日志?

jasmine - Angular Jasmine单元测试: Error: [$injector:unpr] Unknown provider: $confirmProvider

javascript - 在 html cordova 页面上显示来自 php 文件的 php echo

javascript - 等待模态窗口关闭,然后在 javascript 中执行以下行