Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

How to add HTML Extras that contain a <script> tag (and allow that script to be executed)?

未关闭
#1,010 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
48/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
javascript, python
领域
frontend, testing

调研方向

复现 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,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

pytest-dev/pytest-html 的其他 Issue

查看 pytest-dev/pytest-html 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。