为node.js实施WHATWG DOM和HTML标准(以及其他)
我正在尝试从外部访问 jsom 实例内的变量: 这是一个例子: ... window.foo = "你好...</desc> <question vote="3"> <p>我正在尝试从外部访问 jsom 实例内的变量:</p> <p>这是一个例子:</p> <pre><code><!doctype html> <html lang="en"> <head> ... <script> window.foo = "hello world"; </script> </head> .... </html> </code></pre> <p>然后尝试从“外部”jsdom 访问 <em>foo</em> 变量:</p> <pre><code>let dom = new JSDOM(...); dom.window.onload = () => { console.log(dom.window.foo); }; // prints undefined </code></pre> <p>这个问题似乎描述了一个<a href="https://github.com/jsdom/jsdom/issues/2287" rel="nofollow noreferrer">相同的 GitHub 问题</a>,作者通过删除 <em>resources</em> 选项解决了这个问题。但是,我不能这样做,因为我需要运行外部脚本。</p> <p>有什么方法可以调用函数或访问 jsdom 实例中存在的某些变量,并将 <em>resources</em> 设置为 <em>usable</em>?</p> </question> <answer tick="true" vote="10"> <p>请参阅<a href="https://www.npmjs.com/package/jsdom" rel="noreferrer">文档</a>,其中写着:</p> <blockquote> <p>jsdom最强大的能力是它可以执行jsdom内部的脚本。 …这也是非常危险的…默认情况下禁用执行嵌入在 HTML 中的脚本的功能…要启用在页面内执行脚本,您可以使用 <pre><code>runScripts: "dangerously"</code></pre> 选项</p> </blockquote> <p>因此:</p> <pre><code>const jsdom = require("jsdom"); const { JSDOM } = jsdom; const dom = new JSDOM(`<!doctype html> <html lang="en"> <head> ... <script> window.foo = "hello world"; </script> </head> .... </html> `, { runScripts: "dangerously", resources: "usable" }); dom.window.onload = () => { console.log(dom.window.foo); }; </code></pre> </answer> <answer tick="false" vote="0"> <p>只是想添加一个自定义解决方案来解释静态全局变量,而无需依赖第三方内容时<pre><code>runScripts: 'dangerously'</code></pre>。</p> <p><a href="https://gist.github.com/sneko/72f1a6deb9efdf47b952fb3dd31660c6" rel="nofollow noreferrer">https://gist.github.com/sneko/72f1a6deb9efdf47b952fb3dd31660c6</a></p> <p>如果您需要加载远程脚本,这将无济于事,但由于您的帖子是有关此问题的少数帖子之一,我认为发布我的解决方案可以帮助一些:)</p> </answer> </body></html>
我对 NodeJS 非常陌生,如果我的查询太基础,请读者友善。 我有一个 xml 文件,很容易使用 DOMParser 和 querySelector 解析和定位某些节点...
如何在 Eclipse 中为所有 Node.js 项目安装 jsdom?
我目前正在使用 Eclipse 2020-06 和 Node.js 14,并使用单个 .js 文件创建了一个“常规”项目来测试一些 Javascript 代码。我打开命令提示符并运行 npm install jsdo...
在打字稿中找不到 jsdom.getElementById 的工作语法
使用以下代码片段,我尝试了各种搜索字符串,如以下列表,但到目前为止 getElementById() 始终返回未定义。 我做错了什么? '//h1' 'h1' '标题' '//...
使用 NodeJS/Express 将数据加载到 Snowflake
我有一个带有单个按钮的简单 HTML。 JavaScript(客户端脚本)捕获每次点击的时间。我陷入了如何使用 Node.js 传递单击事件/时间发生并显示的问题...
是否可以用jsdom获取多行属性的值(我用的是Node.js+JQuery)? 要抓取的网站包含以下 HTML: 是否可以用jsdom获取多行属性的值(我用的是Node.js+JQuery)? 要抓取的网站包含以下 HTML: <li><a data-title="<strong>hello world this is a test</strong>" href="example.org</strong>">A link</a></li> 不幸的是,这被解析为 <li><a data-title="data-title"><strong>hello world this is a test</strong>' href="example.org">A link</a></li> 所以我无法提取标题和 href 属性,例如通过 JQuery:$("a").attr("data-title")。 有什么想法吗? 是的,这是 jsdom 解析器中的一个错误。这是因为它不使用完整的 HTML5 兼容解析器。您可以看到此类错误仍未解决: https://github.com/tmpvar/jsdom/issues/494 https://github.com/tmpvar/jsdom/issues/482 您可以尝试cheerio进行抓取。
如何更有效地在Javascript中appendChild不同的元素?
我正在尝试制作一个需要带有换行符和上标元素的文本的程序。我正在尝试找出如何使用更少的行来制作文本。 例如,这就是 2 行
我想以编程方式查找给定图像 URL 的类似图像的 URL 列表。我找不到任何免费的图像搜索 API,因此我尝试通过抓取 Google 的按图像搜索来实现此目的。 如果我有...
jest jsdom - dom.window.document.getElementById(X) 成功,但 document.getElementById(X) 失败
这个问题真是令人头疼,Google 和 ChatGPT 都无法解决。 这是一个使用 jsdom 的简单直接的玩笑测试,我在博客和 Github 上见过几十个类似的测试。 1000ms...
我正在测试几个在安装和卸载时到达其 DOM 结构之外的组件,以提供否则不可能实现的特定交互功能。 我正在使用...
如何使用testing-library来触发带有animationName值的React的animationEnd事件?
我有一个 React + TypeScript 项目,我想在其中使用 Jest 和测试库来确认 CSS 动画完成后是否从 DOM 中删除了 div 元素。 但是,删除必须仅
似乎这应该是真正的基本行动,但我找不到任何有关如何执行此操作的文档或示例。 如果我有一些 HTML,并且我想检索特定值并将其设置为
我正在尝试在我的 Next.js 项目中设置 Jest 并使用 Typescript。我在运行时收到以下错误。在设置时我选择了 v8 和 jsdom 也有 预设:'ts-jest/presets/js-...
我在 Vite/React/TypeScript 应用程序中,正在使用 Vitest 配置我的第一个测试。 当我运行 Button 测试 (yarn vitest) 时,出现以下错误: 包/前端/src/组件/通用/按钮/...
我正在使用带有 jsdom 和 Vitest 的 React 测试库。我正在尝试在一个文件中运行多个单元测试,但屏幕变量似乎具有所有渲染调用的输出、所有测试的结果...
我正在使用带有 jsdom 和 Vitest 的 React 测试库。我正在尝试在一个文件中运行多个单元测试,但屏幕变量似乎具有所有渲染调用的输出、所有测试的结果...
使用“testing-library”中的“screen”和“jsdom”时,如何并行运行测试?
我正在将react-testing-library与jsdom和vitest一起使用(通过环境使用jsdom)。我正在尝试在一个文件中运行多个单元测试,但屏幕变量似乎具有所有渲染的输出
模拟窗口对象会导致错误无法在 Window.get 历史记录中读取 null 属性(读取“_history”)[作为历史记录]
我有一个 Vue 组件,我正在尝试对其进行单元测试,其方法如下: 常量关闭 = () => { (window.open('', '_self').opener=window).close() } 我的测试如下所示: 导入 {
升级 Jest 后出现“ReferenceError:TextEncoder 未定义”
我目前正在弹出一个相当大的 create-react-app 项目。在我这样做的同时,我还将 Jest 的版本从 ~27 更新到 ~29。 v28 中有一个重大变化,需要......
我创建了一个 Svelte 组件,它可以快速显示然后消失,只是为了传达该操作已发生以及该操作触及了多少记录。 成分非常