node.js - 新的 JSdom API - 错误
问题描述
节点 v8.10.0
为什么新的 JSdom API 会抛出错误?
"*Error: Not implemented: window.scrollTo*"
"*Error: Uncaught [TypeError: Cannot read property 'origin' of undefined]*"
"*Error: Uncaught [TypeError: Cannot read property 'removeAttribute' of null]*"
等等
旧 API(工作正常);[jsdom v11.3.0]
var jsdom = require("jsdom/lib/old-api.js");
var url = 'https://www.wp.pl';
var requestData = request(url, function(err, resp, HTMLdata) {
if (!err && resp.statusCode === 200) {
console.log('Request success - we render jsdom page \n');
jsdom.env({
html: HTMLdata,
features: {
FetchExternalResources : ['script'],
ProcessExternalResources : ['script'],
SkipExternalResources: false
},
done: function (err, window) {
if (err) {console.log('ERR: ' + err);}
var document = window.document;
window.close();
}
});
}
});
新 API:[jsdom v15.1.1]
const jsdom = require('jsdom');
const {JSDOM} = jsdom;
var url = 'https://www.wp.pl';
var requestData = request(url, function(err, resp, HTMLdata)
{
if (!err && resp.statusCode === 200){
console.log('Request success - we render jsdom page \n');
var JSdom1 = new JSDOM(HTMLdata,
{
url : url,
referrer : url,
runScripts : 'dangerously',
resources : 'usable'
});
if (JSdom1.onload){}
}
});
例如因为新的 API:
"*%cWarning! background:red;color:white;font-weight:bold; WPJSlib is embedded incorrectly, probably 'src' is incorrectly extended. Contact ATFD for further information.*"
我做错了什么?知道如何解决吗?
解决方案
jsdom 的新 API 自动为您创建一个虚拟控制台,该控制台通过管道传输到真实(节点的)控制台。以前版本的 jsdom 用于隐藏这些错误。
您可以简单地在选项中提供一个空VirtualConsole
实例,这将再次隐藏这些错误:
const virtualConsole = new jsdom.VirtualConsole();
const dom = new JSDOM(``, { virtualConsole });
推荐阅读
- javascript - 如何在反应三纤维 MapControls 中限制平移距离
- docker - 使用 docker push 到私有注册表(Heroku Registry)时出现 401 错误
- vb.net - 删除按钮未执行其预期功能,即删除 vb.net 中的记录
- floating-point - (wx)Maxima:将“equal”与浮点数结合使用的最佳实践是什么?
- amazon-web-services - 如何访问特定实例的属性
- entity-relationship - 概念 ERD:相同的表与两个不同的表有关系
- javascript - Vue 2 - 路由到不同页面后承诺不解决
- javascript - 如何使用 JavaScript 自动单击登录按钮
- c# - WPF .NET Core - 如何找到依赖属性更改事件的来源?
- c++ - 为什么我对 range-for 循环的更改不起作用?