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

OP #6128558
Lesenswert?

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:
#6129608
Lesenswert?

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 #6129845
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren