[JAVA Script] Wird nur bei Neu Laden ausgeführt.

OP #6128558
Ich habe da ein Problem. Ich habe ein Javascript welches mir ein 
Bargraph zeichnet. Nun ist aber das Problem das es ausschließlich nur 
dann auseführt wird wenn die Seite neu geladen wird. Wenn ich das Script 
bzw. die dazugehörige Seite über das Menü aufrufe, dann wird dies nicht 
geladen.


Das JS script zum Bargraph:
1
<div id="container"></div>
2
<script src="scripts/progressbar.js"></script>
3
<script>
4
var bar = new ProgressBar.SemiCircle(container, 
5
    {
6
        strokeWidth: 6,
7
        color: '#FFEA82',
8
        trailColor: '#eee',
9
        trailWidth: 1,
10
        easing: 'easeInOut',
11
        duration: 1400,
12
        svgStyle: null,
13
        text: 
14
        {
15
            value: '',
16
            alignToBottom: false
17
        },
18
        from: {color: '#FFEA82'},
19
        to: {color: '#ED6A5A'},
20
        // Set default step function for all animate calls
21
        step: (state, bar) => 
22
        {
23
            bar.path.setAttribute('stroke', state.color);
24
            var value = Math.round(bar.value() * 100);
25
            if (value === 0) 
26
            {
27
                bar.setText('');
28
            } else {
29
                bar.setText(value);
30
            }
31

32
        bar.text.style.color = state.color;
33
        }
34
    });
35
    
36
bar.text.style.fontFamily = '"Raleway", Helvetica, sans-serif';
37
bar.text.style.fontSize = '2rem';
38

39
bar.animate(1);  // Number from 0.0 to 1.0
40
</script>



Wenn ich nun dieses Script direkt beim Seitenlade aufrufe geht es (siehe 
Bild) wenn ich nun bei Start eine andere Seite habe (Startseite) und 
dann links über das Menü (Round Bar) gehe, funktioniert dies nicht.

Nun wird aber die Seite über ein Query String nachgeladen in dem 
Navigationsbereich:


1
function load_home(siteLink) 
2
{
3
    fetch(siteLink /*, options */)
4
    .then((response) => response.text())
5
    .then((html) => {
6
        document.getElementById("content").innerHTML = html;
7
    })
8
    .catch((error) => {
9
        console.warn(error);
10
    });
11
}



Kann dies damit zusammenhängen?
Angehängte Dateien:
Gast
Rene K. schrieb:
> Ich habe nun doch einen kompletten Seitenrefresh gemacht.

genau das ist der springende punkt. die funktion zum zeichnen des 
bargraphen wird nur einmal bei pageload aufgerufen. die dom-manipulation 
führt die kein zweites mal aus
Das Problem ist ein ganz anderes.
1
document.body.innerHTML = '<script>alert("test");</script>';
Aus Schutz vor XSS wird bei sowas des script tag hier nicht ausgeführt.
Dann musst du die scripts halt selbst Rausfiltern & durch eval jagen, 
wenn du das wirklich so machen willst.

Siehe dir auch mal document.createDocumentFragment und WebComponents an.
OP
maler und landstreicher schrieb:
> genau das ist der springende punkt. die funktion zum zeichnen des
> bargraphen wird nur einmal bei pageload aufgerufen. die dom-manipulation
> führt die kein zweites mal aus

Der Befehl zum Zeichen (onload='function..') läge aber in einem div das 
nachgeladen wurde. Aaaaaaber...

Daniel A. schrieb:
> Aus Schutz vor XSS wird bei sowas des script tag hier nicht ausgeführt.

.... Da macht das alles wieder Sinn. Ich verstehe auch den Sinn dahinter 
dir Scriptausführung danach / dabei zu verhindern. Logisch gesehen ist 
dies für Injections ein großes Scheunentor.

Daniel A. schrieb:
> Dann musst du die scripts halt selbst Rausfiltern & durch eval jagen,
> wenn du das wirklich so machen willst.
>
> Siehe dir auch mal document.createDocumentFragment und WebComponents an.

Nein in diesem Fall mach ich es "altmodisch" und lade die gesamte neu. 
Mich persönlich stört das überhaupt nicht, da sich eh fast alles auf der 
Hauptseite abspielt und ausschließlich für meinen privaten Gebrauch 
gedacht ist.

Dennoch werde ich mir das mal anschauen. Man lernt ja nie aus ☺️

Die Bargraphen (siehe Bild) laufen nun auch absolut sauber, über Ajax 
gefüttert, durch.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.