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.foofoo.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です。

そうは言っても、この質問に対する直接の答えはありませんが、問題を解決するための2つの提案があります。

  • ページ上のスクリプトでドキュメントレディハンドラーを使用し、外部スクリプトで呼び出し可能な関数を使用します。したがって、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 に答える