HTML Box mit WebHook ohne Funktion

Hallo,
ich nutze seit ca. 2 Jahren eine HTML Box mit Javascript Webhook Aufrufen zur Steuerung meiner Musik-Playliste. Klicke ich auf einen Link, passiert leider weder im Netzwerk (Browser-Console) noch im Javascript-Bereich etwas.

Der Spezialschalter ServerSecurity hat auch keinen Einfluss.

Hat jemand eine Idee, woran das liegen mag?

<script>								
var items = document.getElementsByClassName("playlist")								
for (var i = 0; i < items.length; i++) {										
  items[i].addEventListener('click', showAlert);									
}	
function showAlert() {									
  var elem = event.target,											
  uri = elem.getAttribute ('hidden');											
  var HTTP = new XMLHttpRequest();												
  HTTP.open("GET","/hook/HeosPlaylist50374?" + uri ,true);												
  HTTP.send(); 
}
</script>	
								
<style type='text/css'><!-- 									
div.playlist{display:block;} 									
div.sartist{color:orange;}  									
div.ssong{color:green;}  			
div.sstation{color:green;}  									
div.sgenre{color:purple;}									
div.salbum{color:yellow;}									
div.smenuo{display:flex; color:lightblue;} 									
div.smenu{display:block; margin-right:15px;}									
div.sopacity{opacity: 0.5;}  
--> </style>

<div class='smenuo'>
<div hidden="type=sources" class="playlist smenu">Hauptebene</div></div>
<div hidden="name=TuneIn&sid=3" class="playlist smusic_service sopacity">TuneIn</div>
<div hidden="name=Deezer&sid=5" class="playlist smusic_service sopacity">Deezer</div>
<div hidden="name=Napster&sid=6" class="playlist smusic_service sopacity">Napster</div>
<div hidden="name=Tidal&sid=10" class="playlist smusic_service sopacity">Tidal</div>
<div hidden="name=SoundCloud&sid=9" class="playlist smusic_service sopacity">SoundCloud</div>
<div hidden="name=Amazon&sid=13" class="playlist smusic_service sopacity">Amazon</div>
<div hidden="name=Local Music&sid=1024" class="playlist sheos_server">Local Music</div>
<div hidden="name=Playlists&sid=1025" class="playlist sheos_service">Playlists</div>
<div hidden="name=History&sid=1026" class="playlist sheos_service">History</div>
<div hidden="name=AUX Input&sid=1027" class="playlist sheos_service">AUX Input</div>
<div hidden="name=Favorites&sid=1028" class="playlist sheos_service">Favorites</div>
</div>

Hast du mal geschaut, ob Ausgaben per console.log irgendwie in der Ausgabe landen?

paresy

Hab das gerade mal versucht nachzustellen. Scheint, als würde schon ein simples

<script>
console.log("Test");
</script>

nicht zu funktionieren.

1 „Gefällt mir“

Gibt es sonst noch Ansätze?
Funktionieren generell noch Links in HTML-Boxen bei Symcon V7?

Gerade ausprobiert => JA … werden in Kachel aufgerufen! Mit target=„_blank“ wird ein neues Browser-Fenster aufgerufen!

Test: PC

Gruß Heiko

Muss da nicht ein Semikolon hin!!??

Könnte sein, dass da das Semikolon fehlt. Nur wieso scheitert es schon an einem einfachen Console.log()?

Kannst du den obigen Quellcode (mit und ohne Semikolon) mal in einer HTML Box ausprobieren? Über die Entwicklerkonsole (F12 in den meisten Browsern) im Punkt Netzwerk sollte man ja sehen, dass was abgerufen wird.

Ich habe nur auf meinem Testsystem ein aktuelles Symcon, das aber gerade nicht greifbar.

Nachtrag: das Semikolon und den Klassennamen, sowie deutliche Reduktion habe ich ausprobiert.

Bereits die Zeile

var items = document.getElementsByClassName("playlist")								
for (var i = 0; i < items.length; i++) {										
  console.log("eventHandler würde hinzugefügt");							
}	

gibt keine Ausgabe.

PS: Wenn ihr schon Google-Fonts nehmt, könnt ihr die auch ohne Google-Server einbinden?

Weiß jemand was sentry.io ist und wofür das aufgerufen wird?

Ich habe jetzt mal Dein Code korriegiert (2 Fehler) und etwas umorganisiert und es funktioniert!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
    <head>  
        <meta http-equiv="content-type" content="text/html; charset=utf-8">  
        <meta name="generator" content="PSPad editor, www.pspad.com">  
        <title>Test</title>
            <style>
      div.playlist {
      display: block;
      }
      div.sartist {
      	color: orange;
      }
      div.ssong {
      	color: green;
      }
      div.sstation {
      	color: green;
      }
      div.sgenre {
      	color: purple;
      }
      div.salbum {
      	color: yellow;
      }
      div.smenuo {
      	display: flex;
      	color: lightblue;
      }
      div.smenu {
      	display: block;
      	margin-right: 15px;
      }
      div.sopacity {
      	opacity: 0.5;
      }
      </style>
    </head>  
    <body>
        <div class='smenuo'> 
            <div hidden="type=sources" class="playlist smenu">Hauptebene
            </div>
        </div> 
        <div hidden="name=TuneIn&sid=3" class="playlist smusic_service sopacity">TuneIn
        </div> 
        <div hidden="name=Deezer&sid=5" class="playlist smusic_service sopacity">Deezer
        </div> 
        <div hidden="name=Napster&sid=6" class="playlist smusic_service sopacity">Napster
        </div> 
        <div hidden="name=Tidal&sid=10" class="playlist smusic_service sopacity">Tidal
        </div> 
        <div hidden="name=SoundCloud&sid=9" class="playlist smusic_service sopacity">SoundCloud
        </div> 
        <div hidden="name=Amazon&sid=13" class="playlist smusic_service sopacity">Amazon
        </div> 
        <div hidden="name=Local Music&sid=1024" class="playlist sheos_server">Local Music
        </div> 
        <div hidden="name=Playlists&sid=1025" class="playlist sheos_service">Playlists
        </div> 
        <div hidden="name=History&sid=1026" class="playlist sheos_service">History
        </div> 
        <div hidden="name=AUX Input&sid=1027" class="playlist sheos_service">AUX Input
        </div> 
        <div hidden="name=Favorites&sid=1028" class="playlist sheos_service">Favorites
        </div> 
        </div>
              <script>
      var items = document.getElementsByClassName("playlist");
      for (var i = 0; i < items.length; i++) {
        items[i].addEventListener('click', showAlert);   
        console.log(i);
        }
        function showAlert() {
            var elem = event.target;
            uri = elem.getAttribute ('hidden');   
            alert(uri);
        } </script>	   
  
    </body>
</html>

Bei mir klappt ein einfaches console.log auf jeden Fall. Ich vermute vom Screenshot her du bist im Browser unterwegs, oder? Denn Browser und App haben unter der Haube (von außen hoffentlich unbemerkt) ein unterschiedliches HTML-Handling.

@yansoph und alle anderen Heos Modul Nutzer:
Dateipfad unter Windows (ggf. an andere Systeme anpassen): c:\ProgramData\Symcon\modules\HeosByDenon\HEOS Device\module.php

In der mir vorliegenden Dateiversion in Zeile 382 bis 402 auf folgendes anpassen:

$out = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>  
    <head>  
        <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">  
        <title>Heos Auswahl</title>
							        <style type='text/css'><!-- 
									div.playlist{display:block;} 
									div.sartist{color:orange;}  
									div.ssong{color:green;}  
									div.sstation{color:green;}  
									div.sgenre{color:purple;}
									div.salbum{color:yellow;}
									div.smenuo{display:flex; color:lightblue;} 
									div.smenu{display:block; margin-right:15px;}
									div.sopacity{opacity: 0.5;}  --> </style>";

Zeile 448: // $out.="</div></div></div>"; ersetzen durch

$out.="</div>
<script>
								var items = document.getElementsByClassName(\"playlist\")
								for (var i = 0; i < items.length; i++) {
										items[i].addEventListener('click', showAlert);
									}
								function showAlert() {
									var elem = event.target;
											uri = elem.getAttribute ('hidden');
											var HTTP = new XMLHttpRequest();
												HTTP.open(\"GET\",\"/hook/HeosPlaylist" . $this->InstanceID . "?\" + uri ,true);
												HTTP.send(); }</script>";

Danach ein MC_ReloadModule($STOREID, 'HeosByDenon');

@tobiasr
Tausend Dank für die Lösung samt Anleitung für den Patch!

Etwas umständlich ist nur das sich die HTML-Box nach betätigen eines Links nicht aktualisiert.
Es muss also jedes mal die HTML-Box verlassen werden und erneut geöffnet werden um zu sehen in welcher Struktur man sich gerade befindet und kann dann erst den nächsten Link auswählen.
Also nach jedem Klick Box schließen und wieder öffnen.
Gibt es hierfür immer noch kein Refresh der HTML-Box?

Könnte mir evtl. jemand bestätigen das sich die HTML-Box nach auswählen eines Links sich nicht automatisch refresht?
Ist jetzt nicht unbedingt das wichtigste auf der Welt, würde mich aber nur mal interessieren…

Viele Grüße

Achtung: Es geht hier nicht darum, dass du einen Link auswählst, sondern dass die HTML Box halt aktualisiert wird.

Teste doch mal bitte folgendes: HTML Box Übersicht in zwei Browsern öffnen. In einem jetzt einen Seitenwechsel antriggern und dann mal beobachten, ob wenigstens der andere Browser die Seite sofort wechselt.

Teste doch mal bitte folgendes: HTML Box Übersicht in zwei Browsern öffnen. In einem jetzt einen Seitenwechsel antriggern und dann mal beobachten, ob wenigstens der andere Browser die Seite sofort wechselt.

funktioniert leider nicht.
Habe gerade mal anstatt mit Edge mit dem Chrome getestet, funktioniert auch nicht.