How to add HTML Extras that contain a <script> tag (and allow that script to be executed)?
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 48/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- javascript, python
调研方向
复现 issue 中的最小演示,然后检查 src/pytest_html/scripts/dom.js 中 format_type === 'html' 的处理以及 data-jsonblob 渲染路径附近的代码。将当前的插入行为与 issue 中描述的 createRange 实验进行比较。当报告加载时,包含 script 标签的 HTML extras 能按预期处理,并且在展开或折叠行时不会发生意外的重复执行,即表示完成。
由索引模型根据 Issue 内容生成。
描述
I'm trying to do similar to https://github.com/pytest-dev/pytest-html/issues/931 but I think I've worked out the general case - is there a way we can add extra HTML code that contains script tags, such that the script can be executed?
Minimum viable demo:
import pytest_html
def test_demo(extras):
extras.append(pytest_html.extras.html('Before'))
extras.append(pytest_html.extras.html('<script>alert("Hello, World!");</script>'))
extras.append(pytest_html.extras.html('After'))
When you load in a web browser, you'll find the <script> tag added between 'Before' and 'After'. However, if you open report.html in a text editor, you find that it isn't inserted into the raw HTML, but rather it's encoded data as part of the data-jsonblob property of <div id="data-container" data-jsonblob="..."> - i.e. the <script> doesn't get executed, because it's inserted dynamically. It appears this is understood behaviour
A bit of experimentation suggested that the createRange method documented here would work, with the disadvantage that the script seems to be executed whenever the row is expanded or collapsed. I achieved this by replacing these lines
if (format_type === 'html') {
resultBody.querySelector('.extraHTML').insertAdjacentHTML('beforeend', `<div>${content}</div>`)
}
with
if (format_type === 'html') {
const range = document.createRange()
const fragment = range.createContextualFragment(content)
resultBody.querySelector('.extraHTML').appendChild(fragment)
}
This isn't necessarily the best way to fix this though.
- 主要语言
- Python
- 星标
- 779
- 派生
- 259
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
pytest-dev/pytest-html 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 68/100
pytest-dev/pytest-html#1077 ·
-
难度 4/5 3-5 天 新手友好度 42/100
pytest-dev/pytest-html#1039 ·
-
Feature: pluggable HTML themes via Jinja2 template inheritance可能已有人在做 @RonnyPfannschmidt 于 137 天前认领。 未关闭
pytest-dev/pytest-html#1029 · 1 个 reaction · 已指派 1 人 ·
-
难度 3/5 1-2 天 新手友好度 55/100
pytest-dev/pytest-html#1027 ·
-
pytest-html does not escape HTML in testId (v4.2.0)可能已有人在做 @golikovichev 于 121 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 55/100
pytest-dev/pytest-html#1024 ·
查看 pytest-dev/pytest-html 的全部 Issue
相似的 Issue
-
first
难度 2/5 1-3 小时 新手友好度 72/100
AcademySoftwareFoundation/rmtc#54 · 1 条评论 ·
-
feature/cohorts feature/feature-flags team/feature-flags
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
License examples/ as MIT可能已有人在做 @PGrayCS 今天认领。 未关闭documentation enhancement example good first issue
难度 2/5 1-3 小时 新手友好度 84/100
speedyk-005/yasbd-lib#383 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
interactions-py/interactions.py#1827 ·
-
Managed start can fail when OpenVMM reads its control capability before NVX writes it可能已有人在做 @ppenna 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复