我正在尝试使用jsdom加载本地HTML文件,这是代码
var config = {
file: "filename",
scripts: ["node_modules/jquery/dist/jquery.min.js"]
done: function(err, window){
console.log(window.document.URL)
console.log(window.document.children)
}
}
jsdom.env(config)
window.document.URL
显示正确的网址,但window.document.innerHTML
没有任何数据。我甚至试过
var config = {
text: *raw-html*,
scripts: ["node_modules/jquery/dist/jquery.min.js"]
done: function(err, window){
console.log(window.document.children)
}
}
但我有同样的结果,有什么帮助?
我找到了
var rawhtml = fs.readFileSync("filename.html","utf8")
jsdom.env(
rawhtml,
["http://code.jquery.com/jquery.js"],
function (err, window) {
console.log(window.$("html").html())
}
);
按预期工作(它会记录html
标记内的所有内容)
config = {
file: "filename.html",
scripts: ["http://code.jquery.com/jquery.js"],
done: function (err, window) {
var $ = window.$;
console.log($("html").html());
}
}
jsdom.env(config);
也可以,但是也不能正确创建document
对象
jsdom没有以与浏览器控制台相同的方式显示document.children
的输出,但是,您期望的所有功能都存在。最终工作document
对象位于
var func = function(document){
console.log(document.body.innerHTML)
document.body.innerHTML = "i changed the body"
}
function getdoc(file, func){
var document;
jsdom.env(
file,
(err, window) => {
document = window.document
func(document)
}
);
}
getdoc("index.html",code)
我使用jsdom.env()
获取document
,然后将document
传递给func
,其中所有有趣的javascript魔法都可以自由发生。请注意,需要手动保存对document
所做的任何更改。
答案 0 :(得分:1)
没有document.innerHTML
属性。
检查"innerHTML" in document
;你得到false
。