Articles of jsdom

ExpressJS + jsdom – 范围问题

我有一个expressJS web应用程序与路线设置。 我也有几个函数存在于jsdom环境中,因为我想利用各种jquery函数。 我遇到的问题是我需要在expressJS作用域级别的jsdom中调用一个函数。 我真的希望这是可能的,因为这将大大简化我的生活。 例如: // express app.get('/someRoute', function(request, response){ myFunction( request.data, function( getResponse ){ response.status( 200 ).send( getResponse ); } }) //jsdom jsdom.env('html', function(err, window) { ….. myFunction( a, callback ){ // <some jquery-only feature that I need> callback(a); } })

getBBox()缺less文本元素的值

我有一个Node.js项目,它使用jsdom和Raphael Js在我的服务器上生成SVG标记,一切都很顺利,直到我调用Raphael文本元素的getBBox()时开始缺less值。 var paper = window.Raphael(10, 50, 320, 200); var txt = paper.text(10, 10, 'hello world!'); console.log( txt.getBBox().toString() ); // Returns: NaN NaN NaN × NaN 而… var rect = paper.rect(10, 10, 10, 10); console.log( rect.getBBox().toString() ); // Returns: 10 10 10 × 10 这将是什么原因,更重要的是有一个修复?

如何在使用JQuery时停止jsdom自动sorting的href结果?

这个脚本使用jsdom和jquery来获取标签的href属性的值。 出于某种原因,它出来完全合格,相对于我正在运行脚本的path。我怎样才能得到只有 href值,不完全合格? var currentDoc = jsdom.jsdom('<html><head><title>href test</title></head><body><p><a href="test.html">Test</a></p></body></html>';, null, {}); var window = currentDoc.createWindow(); jsdom.jQueryify(window, 'jquery-1.4.2.min.js' , function() { console.log(window.$('a')[0]['href']); }); (代码片段也在https://gist.github.com/2355968 )

快速AppFog上的错误,但不是在本地

我在AppFog上托pipe我的应用程序时出现错误。 50行,当我打电话给JSDOM …问题不出现在本地,我不明白为什么它不能在远程工作… 我的代码(在当地工作): exports.index = function(req, res) { Creation.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success( function(creations) { Post.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success(function(posts){ async.map(posts, function(postEntity, callback){ jsdom.env( // PROBLEM HERE postEntity.content, ["http://code.jquery.com/jquery.js"], function(errors, window) { if(errors) return callback(errors); postEntity.content = window.$("p").text(); callback(null, postEntity); } ); }, function(err, transformedPosts){ if(err) return callback(err); […]

与jsdom一起使用WebGLRenderer()时出错

我试图在服务器端渲染一个多维数据集,并能够使用CanvasRenderer,但我想能够使用WebGLRenderer,它应该产生更好的结果。 我已经缩小到这个代码片段: var jsdom = require('jsdom') , document = jsdom.jsdom('<!doctype html><html><head></head><body></body></html>') , window = document.createWindow() , THREE = require('three'); document.onload = docOnLoad(); function docOnLoad() { console.log("docOnLoad called."); global.document = document; global.window = window; //renderer = new THREE.CanvasRenderer(); //works renderer = new THREE.WebGLRenderer(); renderer.setSize(400, 400); document.body.appendChild(renderer.domElement); } 当使用WebGLRenderer时,我得到: _glExtensionTextureFloat = _gl.getExtension( 'OES_texture_float'); ^ TypeError: Cannot call […]

通过forEach参考

这里是我的问题的一些代码: var jsdom = require('jsdom'); var content = '\ <p>\ <img src="assets/logo">\ <img src="assets/background">\ </p>\ '; jsdom.env(content, function (error, window) { var $ = require('jquery')(window) var elements = $.find('img'); elements.forEach(function(imageElement) { var src = $(imageElement).attr('src') + '.jpg'; $(imageElement).attr('src', src); // print "assets/logo.jpg" and "assets/background.jpg" console.log($(imageElement).attr('src')); }); console.log(content); }); 我想要做的是将每个img元素的src内容更改为assets/logo.jpg和assets/background.jpg 。 任何人都可以build议我,我必须做什么,以便将content更改为: <p><img src="assets/logo.jpg"><img src="assets/background.jpg"></p> ?

在JSDom的Nodetesting环境中正确接近“窗口”

我使用Tape和JSDomtesting了我的React应用程序,在每个testingJS文件的顶部导入了以下模块: import jsdom from 'jsdom' function setupDom() { if (typeof document === 'undefined') { global.document = jsdom.jsdom('<html><body></body></html>'); global.window = document.defaultView; global.navigator = window.navigator; global.WebSocket = function(){}; } } setupDom(); 不过,在我的一个React组件中,我像下面这样导入了一个pathseg的polyfill : import 'pathseg' 但是,当我运行testing时,我收到此错误: SVGPathSeg.prototype.classname = "SVGPathSeg"; ^ ReferenceError: SVGPathSeg is not defined 其中,如果我去错误的来源(填充),我看到: (function() { "use strict"; if (!("SVGPathSeg" in window)) { // Spec: […]

将脚本元素添加到DOM而不执行它

我正在创build一个读取HTML文件的节点脚本,将其作为DOM文档进行处理,然后将其序列化回另一个文件。 我现在正在使用jsdom 。 我需要做的一个操作是添加一个<script>元素,其JavaScript代码将对DOM进一步操作。 问题是,只要我将脚本添加到jsdom节点,jsdom就会运行它,并且第二个操作阶段立即完成,因此输出HTML是错误的。 我以为这只会发生在PhantomJS,而不是jsdom,但我错了。 我没有使用jsdom的特殊约束,我可以切换到PhantomJS或其他任何东西,但是我需要生成一个HTML文件,并且在执行我的Node程序时不需要运行脚本就添加了脚本。 有没有办法做到这一点?

如何使用jsdom从文件中获取DOM?

我正在使用Node.js,它的插件请求和FS来保存我的硬盘上的网页。 这是通过以下代码完成的: function loadURL(url, file_path, handler) { request.get(url).on('error', (error) => handler(error)).pipe(fs.createWriteStream(file_path, {'flags' : 'w'})) } 现在,我想通过Node.JS插件JSDOM从本地文件获取HTML DOM。 因此: 我必须阅读这个文件感谢插件FS; 当读取所有文件的HTML代码时,我必须将后者存储为一个string; 最后,我必须调用: jsdom.jsdom(the_string_containing_HTML_code) 。 步骤3很简单。 第二也许。 但是…我怎么能asynchronous读取本地文件使用FS? readfunction不应按照文件使用; 相反,我应该使用pipe …但后者只是将一个WritableStream到一个ReadableStream …它不能满足我想要的。 注意:我真的想要使用asynchronous方法。

当使用Node和jsdom到蜘蛛网站时,会导致内存不足

我试图从我已经存储在一个数组中的一堆HTML页面中拉出一个string。 我有以下代码: const jsdom = require('jsdom') desc('Import pages'); task('handleSpots', [], function (params) { allSpots.forEach(function(spotUrl){ handleSpot(spotUrl) }) }); function handleSpot (href) { jsdom.env( href, ["http://code.jquery.com/jquery.js"], function (err, window) { if (err) { console.log(host+href+" "+err) return } const data = {url: host+href} data['name'] = window.$("h1.wanna-item-title-title a").text() console.log(data['name']) window.close() } ); } allSpots数组中有大约600个URL。 当我运行这个我得到一堆错误: /the_hook/index.html Error: read ECONNRESET […]