NEWS
script im html widget hat fehler
-
@liv-in-sky sagte in script im html widget hat fehler:
player.loadPlaylist
ok
hab die doku gefunden, ist die youtube api
https://developers.google.com/youtube/iframe_api_reference?hl=deDas ist der richtige Befehl für nur ein Element
<script>player.loadPlaylist("4MJRS-cLozU" );</script>Bei zwei und mehr Elementen
<script>player.loadPlaylist(["4MJRS-cLozU","4MJRS-cLozU"] );</script>@oliverio würde dich gerne noch was fragen
ich möchte das widget mit dem yt-player in verschiedenen projekten nutzen
gibt es eine möglichkeit, ein widget , welches ein script im html teil hat, zu deaktivieren ? ich möchte, dass dieses widget das script nicht mehr ausführt
natürlich sollte das widget wieder geladen/aktiviert werden können
fällt dir da was ein ?
oder muss ich das anders lösen - z.b. das widget über einen datenpunkt zu beschreiben - dann könnte ich ja den yt-player überschreiben
-
@oliverio würde dich gerne noch was fragen
ich möchte das widget mit dem yt-player in verschiedenen projekten nutzen
gibt es eine möglichkeit, ein widget , welches ein script im html teil hat, zu deaktivieren ? ich möchte, dass dieses widget das script nicht mehr ausführt
natürlich sollte das widget wieder geladen/aktiviert werden können
fällt dir da was ein ?
oder muss ich das anders lösen - z.b. das widget über einen datenpunkt zu beschreiben - dann könnte ich ja den yt-player überschreiben
@liv-in-sky
hm, müsste man mal probieren.
welches widget ist es?wenn man die funktionsadresse erreicht, dann könnte man diese "überladen".
als start vereinfachtes Beispiel, hier wird in einem widget eine funktion definiert.
var a = function(a,b,c) { //hier diverser code der ausgeführt wird } a(1,2,3)dann könnte man an anderer stelle, nachdem die funktion definiert wurde so etwas machen
a = function(a,b,c) {}dadurch würde die funktion die in a gepeichert ist, überladen mit einer funktion, die die selbe aufruf signatur hat, aber einfach nix macht. sie würde vom vorhandenen code noch aufgerufen werden, aber halt ohne funktion.
man könnte dann auch geänderten code reinschreiben und so eine andere Ausführung erzeugen.
Da die Erzeugung von vis widgets von der Reihenfolge nicht vorhersehbar ist (ich habe bisher noch kein Schema entdecken können, numerische Reihenfolge ist es nämlich nicht), müsste man die Funktion regelmäßig monitoren und ggfs immer wieder neu überladen.
Aber wie gesagt, das hängt davon ab wie das widget gestaltet wurde. -
@liv-in-sky
hm, müsste man mal probieren.
welches widget ist es?wenn man die funktionsadresse erreicht, dann könnte man diese "überladen".
als start vereinfachtes Beispiel, hier wird in einem widget eine funktion definiert.
var a = function(a,b,c) { //hier diverser code der ausgeführt wird } a(1,2,3)dann könnte man an anderer stelle, nachdem die funktion definiert wurde so etwas machen
a = function(a,b,c) {}dadurch würde die funktion die in a gepeichert ist, überladen mit einer funktion, die die selbe aufruf signatur hat, aber einfach nix macht. sie würde vom vorhandenen code noch aufgerufen werden, aber halt ohne funktion.
man könnte dann auch geänderten code reinschreiben und so eine andere Ausführung erzeugen.
Da die Erzeugung von vis widgets von der Reihenfolge nicht vorhersehbar ist (ich habe bisher noch kein Schema entdecken können, numerische Reihenfolge ist es nämlich nicht), müsste man die Funktion regelmäßig monitoren und ggfs immer wieder neu überladen.
Aber wie gesagt, das hängt davon ab wie das widget gestaltet wurde.ist ein standard html widget
dieses widget soll in verschiedenen views aufrufbar sein
dieses widget macht die steuerung

-
ist ein standard html widget
dieses widget soll in verschiedenen views aufrufbar sein
dieses widget macht die steuerung

dann verstehe ich nicht so ganz.
da ist ja der komplette code drin.
den kann man ja bearbeiten wie man möchte.
unter welche umständen soll es dann nicht mehr funktionieren?
was willst du genau erreichen?ok nach nochmaligem lesen möchtest du ein allgemeines youtube widget habe,
das du irgendwie steuern kannst (per datenpunkt bspw) um beliebige videos abzuspielen und das informiert, wenn ein video zu ende ist.problem am html widget ist, das der einzige weg dem widget einen datenpunkt mitzugeben das binding ist, welches man im html einbettet. Hab das zwar so noch nie getestet, müsste aber funktionieren;
<script> var dp = "{javascript.0.test}"; </script>weiteres problem ist, das jedesmal wenn sich der datenpunkt ändert, wird das komplette widget von der seite entfernt und wieder neu hinzugefügt. d.h.
das widget weiß nicht mehr, das es gerade noch da war. das muss man beim programmieren berücksichtigen -
dann verstehe ich nicht so ganz.
da ist ja der komplette code drin.
den kann man ja bearbeiten wie man möchte.
unter welche umständen soll es dann nicht mehr funktionieren?
was willst du genau erreichen?ok nach nochmaligem lesen möchtest du ein allgemeines youtube widget habe,
das du irgendwie steuern kannst (per datenpunkt bspw) um beliebige videos abzuspielen und das informiert, wenn ein video zu ende ist.problem am html widget ist, das der einzige weg dem widget einen datenpunkt mitzugeben das binding ist, welches man im html einbettet. Hab das zwar so noch nie getestet, müsste aber funktionieren;
<script> var dp = "{javascript.0.test}"; </script>weiteres problem ist, das jedesmal wenn sich der datenpunkt ändert, wird das komplette widget von der seite entfernt und wieder neu hinzugefügt. d.h.
das widget weiß nicht mehr, das es gerade noch da war. das muss man beim programmieren berücksichtigenim moment liegt das widget mit dem yt-player in einer view und läßt sich ohne probleme steuern
ich würde aber gerne den player bzw das script deaktivieren können, weil ich gerne über einen schalter sagen möchte, auf welchen tablet, echo show oder raspi-mit kiosk der player laufen soll
das problem- alle diese player (in den verschiedenen views) werden von einem javascript gesteuert bzw , da bidirectional - geben rückmeldung - das bedeutet, das gleichzeitig mehrere player laufen und alle die selben dp des steuer-scripts füttern - das ist natürlich nicht gut. es ist schon ein problem, wenn in dem vis-editor die seite mit dem player-widget offen ist und gleichzeitig eine view mit einem player in der runtime - schon da kommt es zu seltsamen reaktionen - ist aber nicht so wild, ich deaktiviere den vis-editor tab, wenn ich das in der runtime teste und code
momentan suche ich nach einen weg, wie ich immer nur einen player aktivieren kann - je nachdem, welches tablet (view),.. ich nutzen will
ich habe mal versucht, nur das script des players in einen dp zu schreiben um den player zu aktivieren (durch das schreiben des dp wird das widget (binding) neu geladen und der player initialisiert)
zum deaktivieren setze ich dann diesen dp auf " " - so ist das script nicht mehr da (in der theorie) und alles ist gut - leider ist das nicht der fall, das script läuft im browser weiter. den player selbst kann ich mit player.destroy() stoppen - aber mein script im selben widget nichtist alles ein wenig schwer zu beschreiben
gerade fällt mir aber ein, dass in meinem script evtl eine abfrage rein muss, um das interval zu stoppen, wenn der player nicht existiert
werd ich gleich mal testen -
dann verstehe ich nicht so ganz.
da ist ja der komplette code drin.
den kann man ja bearbeiten wie man möchte.
unter welche umständen soll es dann nicht mehr funktionieren?
was willst du genau erreichen?ok nach nochmaligem lesen möchtest du ein allgemeines youtube widget habe,
das du irgendwie steuern kannst (per datenpunkt bspw) um beliebige videos abzuspielen und das informiert, wenn ein video zu ende ist.problem am html widget ist, das der einzige weg dem widget einen datenpunkt mitzugeben das binding ist, welches man im html einbettet. Hab das zwar so noch nie getestet, müsste aber funktionieren;
<script> var dp = "{javascript.0.test}"; </script>weiteres problem ist, das jedesmal wenn sich der datenpunkt ändert, wird das komplette widget von der seite entfernt und wieder neu hinzugefügt. d.h.
das widget weiß nicht mehr, das es gerade noch da war. das muss man beim programmieren berücksichtigenwarum funktioniert das nicht? möchte das interval beenden, wenn das yt-player object null ist

im browser log sieht es so aus

-
warum funktioniert das nicht? möchte das interval beenden, wenn das yt-player object null ist

im browser log sieht es so aus

ich habe mir das mal angeschaut und glaube das es in einem html widget zu schwierig ist so umzusetzen, das man davon beliebig viele in eine view einbauen kann.
Problem 1:
Das skript erzeugt ein eigenes Skripttag über das es die eigentliche Bibliothek von yoututbe lädt.
Wenn du mehrere widgets einfügst, dann wird die bibliothek mehrfach geladen. das könnte Probleme geben-Problem 2:
Das Skript nutzt eine Funktion, welche von der geladenen Bibliothek aufgerufen wird, wenn die bibliothek geladen ist. diese funktion darf nur einmal existieren. wenn man mehrere html widgets mit dieser funktion zu vis hinzufügt, wird nur der letzte aufgerufen und die anderen nicht.Meiner Meinung nach könnte man das nur umgehen wenn man ein eigenes widget baut, Dort wäre dann allgemeiner Code und der wüsste wieviel playerwidgets gleichzeitig auf einer vis sich befinden und kann das regeln.
zum Problem mit dem abbrechen von setInterval.
Um den abzubrechen, muss man sich die ID merken, die setInterval beim ersten Aufruf zurückgibt und clearInterval mit diesem ID löscht dann diesen.
Besser wäre setTimeout zu verwenden und am Ende des Codes dann den immer wieder neu aufzurufen, solange du abbrechen willst, dann einfach nicht nochmal neu aufrufen -
ich habe mir das mal angeschaut und glaube das es in einem html widget zu schwierig ist so umzusetzen, das man davon beliebig viele in eine view einbauen kann.
Problem 1:
Das skript erzeugt ein eigenes Skripttag über das es die eigentliche Bibliothek von yoututbe lädt.
Wenn du mehrere widgets einfügst, dann wird die bibliothek mehrfach geladen. das könnte Probleme geben-Problem 2:
Das Skript nutzt eine Funktion, welche von der geladenen Bibliothek aufgerufen wird, wenn die bibliothek geladen ist. diese funktion darf nur einmal existieren. wenn man mehrere html widgets mit dieser funktion zu vis hinzufügt, wird nur der letzte aufgerufen und die anderen nicht.Meiner Meinung nach könnte man das nur umgehen wenn man ein eigenes widget baut, Dort wäre dann allgemeiner Code und der wüsste wieviel playerwidgets gleichzeitig auf einer vis sich befinden und kann das regeln.
zum Problem mit dem abbrechen von setInterval.
Um den abzubrechen, muss man sich die ID merken, die setInterval beim ersten Aufruf zurückgibt und clearInterval mit diesem ID löscht dann diesen.
Besser wäre setTimeout zu verwenden und am Ende des Codes dann den immer wieder neu aufzurufen, solange du abbrechen willst, dann einfach nicht nochmal neu aufrufenwas ich nicht verstehe - das log zeigt null aber das if reagiert nicht - hast du eine idee , warum das so sein könnte - dann wäre alle gut und ich könnte das schon hinbkommen
var ytInter= setInterval( function () { console.log(player.i); if(player.i == null || player.i==undefined || !player) {console.log("AUS");clearInterval(ytInter);} ....... .......hier sieht man, nachdem ich den player destroyed habe, dass null gelogt wird - verstehe das einfach nicht

-
ich habe mir das mal angeschaut und glaube das es in einem html widget zu schwierig ist so umzusetzen, das man davon beliebig viele in eine view einbauen kann.
Problem 1:
Das skript erzeugt ein eigenes Skripttag über das es die eigentliche Bibliothek von yoututbe lädt.
Wenn du mehrere widgets einfügst, dann wird die bibliothek mehrfach geladen. das könnte Probleme geben-Problem 2:
Das Skript nutzt eine Funktion, welche von der geladenen Bibliothek aufgerufen wird, wenn die bibliothek geladen ist. diese funktion darf nur einmal existieren. wenn man mehrere html widgets mit dieser funktion zu vis hinzufügt, wird nur der letzte aufgerufen und die anderen nicht.Meiner Meinung nach könnte man das nur umgehen wenn man ein eigenes widget baut, Dort wäre dann allgemeiner Code und der wüsste wieviel playerwidgets gleichzeitig auf einer vis sich befinden und kann das regeln.
zum Problem mit dem abbrechen von setInterval.
Um den abzubrechen, muss man sich die ID merken, die setInterval beim ersten Aufruf zurückgibt und clearInterval mit diesem ID löscht dann diesen.
Besser wäre setTimeout zu verwenden und am Ende des Codes dann den immer wieder neu aufzurufen, solange du abbrechen willst, dann einfach nicht nochmal neu aufrufen@oliverio sagte in script im html widget hat fehler:
Problem 1:
Das skript erzeugt ein eigenes Skripttag über das es die eigentliche Bibliothek von yoututbe lädt.
Wenn du mehrere widgets einfügst, dann wird die bibliothek mehrfach geladen. das könnte Probleme geben-
Problem 2:
Das Skript nutzt eine Funktion, welche von der geladenen Bibliothek aufgerufen wird, wenn die bibliothek geladen ist. diese funktion darf nur einmal existieren. wenn man mehrere html widgets mit dieser funktion zu vis hinzufügt, wird nur der letzte aufgerufen und die anderen nicht.ich hätte diese player in verschiedenen vis-projecten - daher sollte das kein thema sein -verschiedene geräte, die verschiedene vis projekte und deren views nutzen
in einem project in verschiedenen views - da hast du sicher recht - das ginge so nicht
-
was ich nicht verstehe - das log zeigt null aber das if reagiert nicht - hast du eine idee , warum das so sein könnte - dann wäre alle gut und ich könnte das schon hinbkommen
var ytInter= setInterval( function () { console.log(player.i); if(player.i == null || player.i==undefined || !player) {console.log("AUS");clearInterval(ytInter);} ....... .......hier sieht man, nachdem ich den player destroyed habe, dass null gelogt wird - verstehe das einfach nicht

@liv-in-sky woher kommt i ?
innerhalb von setTimeout/setInterval bis du nicht mehr im normalen Skript scope.
d.h. ein vor setInterval definiertes i ist innen drin nicht mehr verfügbar.
du kannst mal probieren das i (leider sehe ich den code dafür nicht) mit let anstatt mit var zu deklarieren.
wenn das nicht funktioniert, dann muss man der funktion das i per bind mitgeben.
aber irgendwie glaube ich hast du bei player.i noch ein denkfehler.
zeig mal den code wo i definiert wird -
@liv-in-sky woher kommt i ?
innerhalb von setTimeout/setInterval bis du nicht mehr im normalen Skript scope.
d.h. ein vor setInterval definiertes i ist innen drin nicht mehr verfügbar.
du kannst mal probieren das i (leider sehe ich den code dafür nicht) mit let anstatt mit var zu deklarieren.
wenn das nicht funktioniert, dann muss man der funktion das i per bind mitgeben.
aber irgendwie glaube ich hast du bei player.i noch ein denkfehler.
zeig mal den code wo i definiert wirdwenn ich als ersten befehl innerhalb setInterval den clearInterval aufrufe stoppt das script - aber das console log("AUS") wird schon nicht ausgeführt - if trifft nicht zu - das kapier ich nicht
das i definiert der yt-player - hier das ganze object - console.log(player) - ganz unten siehst du i -

das war der wert, der mir aufgefallen war - daher nutze ich diesen wert - ich kann auch auf player prüfen - das geht auch nicht
nach dem befehl destroy player kommt das als object zurück - daher habe ich i gnommen

Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden