How to add HTML Extras that contain a <script> tag (and allow that script to be executed)?
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 48/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- javascript, python
Rechercherichtung
Reproduziere die minimale Demo aus dem Issue und untersuche anschließend src/pytest_html/scripts/dom.js im Bereich der Behandlung von format_type === 'html' und des data-jsonblob-Rendering-Pfads. Vergleiche das aktuelle Einfügeverhalten mit dem im Issue beschriebenen createRange-Experiment. Erledigt ist die Aufgabe, wenn HTML-Extras mit script-Tags beim Laden des Reports wie vorgesehen behandelt werden, ohne unbeabsichtigte wiederholte Ausführung beim Ein- oder Ausklappen von Zeilen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- Python
- Sterne
- 779
- Forks
- 263
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus pytest-dev/pytest-html
-
test_rerun integration tests fail with pytest-rerunfailures 16.7Evtl. vergeben @nicozdeb hat das vor 6 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
pytest-dev/pytest-html#1085 · 1 Kommentar ·
-
HTML extras for 'call' and 'teardown' phases get mergedEvtl. vergeben @contputer0x0 hat das vor 25 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
pytest-dev/pytest-html#1077 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 42/100
pytest-dev/pytest-html#1039 ·
-
Feature: pluggable HTML themes via Jinja2 template inheritanceEvtl. vergeben @RonnyPfannschmidt hat das vor 165 Tagen übernommen. Offen
pytest-dev/pytest-html#1029 · 1 Reaktion · 1 zugewiesene Person ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
pytest-dev/pytest-html#1027 ·
Alle Issues in pytest-dev/pytest-html
Ähnliche Issues
-
fuzz fuzz-unconfirmed
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
neilsh/stunt-reel#220 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Issue]: use_fp4_cache is accepted but ignored; the launcher always writes FP8 recordsEvtl. vergeben @0z5a hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
area: cli priority: p3 size: S type: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
finos/open-resource-broker#757 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Maintainer antworten meist innerhalb von 6 Tagen