1

私はJSDOMを使い始めていますが、これは正しく機能しています:

jsdom.env(
'<p><a class="the-link" href="https://github.com/tmpvar/jsdom">jsdom\'s Homepage</a></p>',
["http://127.0.0.1:8080/js/test.js"],
function (errors, window) {
    //console.log("contents of a.the-link:", window.$("a.the-link").text());
    console.log(errors);
    console.log(window.myVar);
    console.log(window.test);

});

Test.js スクリプトは非常に単純です。

console.log("testing testing testing");
window.myVar = "myVar Content";
var test = "test content";

スクリプトを実行すると、myVar と test の内容が表示されます。

しかし、問題は、私がハードコアな方法でそれをやり始めたときです(ドキュメントが言うようにハードコア):

私は次のことを行います:

var jsdom = require("jsdom").jsdom;
var document = jsdom("<html><head></head><body>hello world</body></html>");
var window = document.parentWindow;

var script =  document.createElement("SCRIPT");
script.src = "http://127.0.0.1:8080/js/test.js";
var head= window.document.getElementsByTagName('head')[0];
head.appendChild(script);
var window = document.parentWindow;

console.log("myVar Content: " + window.myVar);

この場合、window.myVar は未定義です。

私は何が欠けていますか?

ありがとう。

4

1 に答える 1

4

私はそれを行う方法を見つけました:

var jsdom = require("jsdom").jsdom;
var document = jsdom("<html><head></head><body>hello world</body></html>");
var window = document.parentWindow;

var script =  document.createElement("script");
script.type = "text/javascript";
var fs = require("fs");
var requireJSFile = fs.readFileSync("test.js","utf8");
    script.innerHTML = requireJSFile;
var head= window.document.getElementsByTagName('head')[0];
head.appendChild(script);
var window = document.parentWindow;

console.log(document.innerHTML);
console.log("myVar Content: " + window.myVar);

var に関数を追加し、window.myVar(param1, param2, param3) として使用できるかどうかを確認します。

私はそれがうまくいくと確信しています。

于 2013-10-21T09:45:30.137 に答える