Hallo Leute. Ich versuche, ein Problem mit dem DOM-Objektlebenszyklus zu lösen. Ich habe diesen Thread gelesen: A tour of how the Widget (Virtual DOM) code in Discourse works, aber er hilft mir immer noch nicht, meine Frage zu beantworten oder mich zumindest in eine Richtung zu weisen, um mein Problem zu lösen. Ich habe Schwierigkeiten, es zu verstehen.
Ich habe ein sehr einfaches Plugin als Wrapper für einen externen Dienst (genauer gesagt, die Rumbletalk-Chat-Engine) geschrieben. Das Plugin funktioniert wie gewünscht, der Chat funktioniert usw., außer wenn Sie vom Chat zu einem anderen Teil meiner Website navigieren und dann zurück zum Chat. Ich erhalte einen Fehler aus deren mitgeliefertem JavaScript, dass ich versuche, einen doppelten Chat zu erstellen.
Das Plugin ist ein einfaches hbs/Widget, das den folgenden HTML-Code erstellt:
<div style="height: 500px;">
<div id="$MY_ID"></div>
<script src="https://rumbletalk.com/client/?$MY_OTHER_ID"></script>
</div>
Und hat auch einige Anmelde-JavaScript.
Ich gehe davon aus, dass irgendwo im DOM noch das gerenderte HTML vorhanden ist und wenn dieses Skript erneut geladen und ausgeführt wird, wird es erkannt. Wenn ich in der Entwicklerkonsole debugge, sehe ich den Fehler, der aus dem JavaScript des Skript-Tags und nicht aus dem Anmeldecode ausgelöst wird.
Ich habe mich an das Personal von Rumbletalk gewandt, aber noch keine Antwort erhalten. Hat jemand einen Vorschlag, was ich als Nächstes untersuchen kann? Das Einzige, was mir gelungen ist, ist das Hinzufügen eines window.onerror-Handlers und dann ein location.reload(). Das ist offensichtlich keine gute Lösung. Gibt es eine Möglichkeit, die DOM-Objekte der Chat-Engine zu “leeren”, wenn die Seite den Fokus verliert?
Vielen Dank für jede Hilfe.
-=Bob