我正在尝试使用jsdom加载本地javascripts。 现在我想知道如何让jsdom从“__dirname /../ public”加载javascripts。 有人能帮助我吗?
我目前的代码是:
var fs = require('fs');
var jsdom = require('jsdom');
jsdom.defaultDocumentFeatures = {
FetchExternalResources: ["script"],
ProcessExternalResources: ["script"],
MutationEvents : '2.0',
QuerySelector : false
};
exports.test = function(req, res) {
var html = fs.readFileSync(__dirname+'/../public/html/lame.html');
var document = jsdom.jsdom(html, null, {documentRoot: __dirname+'/../public/'});
var window = document.createWindow();
window.addEventListener('load', function () {
//window.$('script').remove();
//window.$('[id]').removeAttr('id');
res.send(window.document.innerHTML);
window.close();
});
}
简单的HTML页面是:
<html>
<head>
<title id="title">bum</title>
<script type="text/javascript" src="/javascripts/jquery.min.js"></script>
<script type="text/javascript" src="/javascripts/stuff.js"></script>
</head>
<body>
<h1>hello world</h1>
<h2 id="bam">XXX</h2>
</body>
</html>
答案 0 :(得分:1)
我遇到了同样的问题,并让它发挥作用。按顺序尝试这些:
documentRoot
未记录在案。 documented的选项为url
。因此,请将documentRoot
替换为url
。
如果上述内容不足,请添加base
元素。我已经设置了这样的模板:
<head>
<base href="@BASE@"></base>
<!-- ... -->
</head>
其中@BASE@
替换为与传递给url
的值相同的值。
上述解决方案是从测试套件中使用的actual code中提取的。