borisbaer: JS script sowohl bei dynamisch als auch statisch geladenem content ausführen

Beitrag lesen

problematische Seite

Hallo Rolf,

du musst bei sowas höllisch aufpassen. Wenn Du Teile des DOM entlädst, werden die Eventhandler, die auf den entladenen Elementen registriert sind, entfernt.

Und wenn Du Eventhandler im "Außenbereich" registriert hast, also in dem Teil der Seite, der nicht entladen wird, diese Eventhandler auf Events aus dynamisch geladenem HTML reagieren, dann könnte das zu argem Kuddelmuddel führen.

normalerweise werden die scripts ja im head der HTML-Datei eingespeist, also wahrscheinlich das, was du mit „Außenbereich“ meinst. Eigentlich möchte ich das weiterhin so beibehalten für sämtlich JS scripts. Im Grunde müsste man ja dann bei jedem dynamischen Inhalt, der Teil eines JS scripts ist, genau überlegen, was mit den Eventhandlern passiert, wenn dieser Inhalt wieder verschwindet. Habe ich dich da richtig verstanden?

Du hattest mir ja vor einiger Zeit geholfen zu bewerkstelligen, dass der Hauptinhalt meiner Seite je nach Situation statisch oder dynamisch geladen wird. Statisch ist ja gar kein Problem in Bezug auf die JS scripts, aber ich muss es irgendwie einrichten, dass sie auch dann funktionieren, wenn der Inhalt mal dynamisch geladen wird.

Die Abneigung gegen Script im Ajax-Teil ist nicht unberechtigt. Ich bin mir nicht so klar, wie der Browser damit umgeht, wenn Du fünf mal zwischen Subpage A und B hin und her schaltest und jedesmal das Script für die Subpage lädst. Es könnte nachher 5x im Speicher sein.

Das weiß ich leider auch nicht.

Da wär's besser, das Script für alle Subpages einmal zu laden (das sollte von den Daten wohl unabhängig sein) und nach dem Load der Subpage eine Initialisierungsfunktion aufzurufen, die die nötigen Eventhandler registriert.

Hmm, also ich weiß leider nicht so recht, wie du das hier meinst. Meinem Verständnis nach läuft ein JS script einmal durch, wenn du die Seite lädst. Es funktioniert dann mit allem drum und dran, aber wenn ich den Inhalt, auf den sich das script bezieht, dynamisch rausnehme und wieder einfüge, dann ist das script gewissermaßen „blind“ in Bezug auf diesen Teil des Codes.

Man müsste das script beim dynamischen Laden noch einmal laufen lassen, oder? Wenn ich bspw. genau das gleiche script in einen MutationObserver kopiere, der so eingestellt ist, dass er schaut, ob in dem Container, in dem Inhalte dynamisch ausgetauscht werden, der entsprechende Inhalt eingefügt wurde, von dem das script abhängig ist, dann läuft zwar nicht dasselbe script erneut, aber das gleiche bzw. ein identisches.

Ich hatte es bereits so ausprobiert und es hat auch geklappt, aber dann habe ich halt zweimal das gleiche script, was irgendwie doof ist, denn wenn ich da mal was ändere, muss ich das beim script im MutationObserver auch immer ändern.