javascript - JSDom 不将文本作为脚本运行

标签 javascript node.js jsdom

根据JSDom README ,您可以传递一个 Javascript 字符串数组来执行,但似乎此功能对我不起作用。

这是我的 Node 应用程序:

var fs = require('fs');
var jsdom = require('jsdom-no-contextify');

var scripts = ['manipulate-dom.js'];
var src = scripts.map(function(filename) {
    return fs.readFileSync(filename, 'utf8');
});

console.log(src[0]);

jsdom.env({
    html: '<div>Hi</div>',
    src: src,
    done: function(errors, window) {
        console.log(window.document.querySelector('div').textContent);
        window.doStuff();
        console.log(window.document.querySelector('a').textContent);
    }
});

这是我的另一个文件:

console.log('Running JS');

function doStuff() {
    var a = document.createElement('a');
    a.textContent = 'TEXT!';
    window.document.body.appendChild(a);
}

window.doStuff = doStuff;

输出如下:

console.log('Running JS');

function doStuff() {
    var a = document.createElement('a');
    a.textContent = 'TEXT!';
    window.document.appendChild(a);
}

window.doStuff = doStuff;
Hi

...
        window.doStuff();
               ^
TypeError: Object #<Window> has no method 'doStuff'

它甚至不打印“Running JS”。我做错了什么?

最佳答案

尝试观察“错误”对象中的内容。根据文档:如果窗口创建成功并且没有 s 导致错误,则错误将为 null,并且窗口将可用。

您的问题可能会在那里被揭露。 =)

关于javascript - JSDom 不将文本作为脚本运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28908445/

相关文章:

javascript - 捕获目标页面以评估它返回的内容

javascript - index.ejs 中的 Angular Controller 错误

node.js - Electron - IPC改变对象

javascript - jsdom 不触发内部 &lt;script&gt;

javascript - Tab 按键不会改变焦点元素

javascript - 显示纺车图像直到整页加载

javascript - 有没有办法将值传递给 GM_xmlhttprequest?

node.js - 如果没有值,为什么 postgres(带有sequelize)计数为1?

node.js - 如何创建一个自定义管道来接收对象作为 Angular 4 中的过滤器

node.js - 使用 highcharts 在服务器端生成 svg