Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Frage] Scripte/jQuery

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Scripte/jQuery

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      nevermind last edited by

      Hallo,

      ich baue mir gerade in .vis ein Keypad um nach Code-Eingabe ein Programm zu starten. Prinzipiell funktioniert das schon. Ich bin jedoch über folgendes gestolpert:

      Ich möchte mein Problem mal beispielhaft an dem Code aus der Doku festmachen und nicht an meinem konkreten Anwendungsfall.

      In der Doku steht folgendes:

      ` > Skripte

      Hier kann das Standardverhalten von Widgets geändert werden. Bei dem Einsatz dieses Werkzeugs sollte der Anwender wirklich gut im CSS/Javascript/jQuery sein um es machen zu können. Dieses Skript wird zusammen mit dem View geladen.

      z.B. beim Klick auf jedes Widget sollte ein Sound abgespielt werden:

      setTimeout(function () {
          $('.vis-widget').click(function () {
             var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3');
             audio.play(); 
          });
      }, 2000);
      
      ```` `  
      

      Ich vermute setTimeout() wird hier verwendet, um das click-Event erst etwas verzögert an die Elemente zu binden, da diese direkt bei document.ready noch nicht gefunden werden, oder?

      Ohne setTimeout() funktioniert es nicht. Mit setTimeout() erstmal schon, allerdings dann nicht mehr, wenn das Widget (welches das Script enthält) nicht direkt im "Startview", sondern erst nach einem Wechsel des Views geladen wird.

      Mein Lösung (mit der ich aber nicht wirklich zufrieden bin) sieht wie folgt aus:

      Ich habe meinen js-Code in eine externe js-Datei ausgelagert und diese datei in der index.html verlinkt. In dieser js-Datei steht dann:

          $(document).on('click', '.vis-widget', function(){
             var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3');
             audio.play(); 
          });
      
      

      Das Event wird also an document gebunden, da es .vis-widget' ja im DOM erstmal noch nicht gibt.

      Dazu zwei Fragen:

      1. Gibt es eine bessere Lösung als das Auslagern des Codes in eine Datei?

      2. Wenn ich meine .js-Datei editiere, werden die Änderungen nicht direkt sichtbar. ioBroker scheint diese Dateien zu cachen. Wie kann ich diesen Cache deaktivieren bzw. leeren ohne ioBroker neu starten zu müssen?

      Vielen Dank

      Jens

      1 Reply Last reply Reply Quote 0
      • arteck
        arteck Developer Most Active last edited by

        wo hasten du den Code eingebuden ??

        global ??

        1 Reply Last reply Reply Quote 0
        • N
          nevermind last edited by

          @arteck:

          wo hasten du den Code eingebuden ??

          global ?? `
          Im betreffenden widget ganz rechts im Reiter "Scripts".

          Gesendet von meinem Nexus 5X mit Tapatalk

          1 Reply Last reply Reply Quote 0
          • arteck
            arteck Developer Most Active last edited by

            @nevermind:

            @arteck:

            wo hasten du den Code eingebuden ??

            global ?? `
            Im betreffenden widget ganz rechts im Reiter "Scripts".

            Gesendet von meinem Nexus 5X mit Tapatalk `

            ach jetzt hab ich es verstanden… du bindest den Code an ein Widget ... dann ist es wohl logisch, dass es nur auf der einen View funktioniert...

            javascript adapter installieren und klimper den code da ein

            1 Reply Last reply Reply Quote 0
            • N
              nevermind last edited by

              Ok, werde ich versuchen. Das Problem ist allerdings, dass der Code im Widget eben gerade nicht funktioniert, wenn das widget in einem view ist, das nicht das "Hauptview" ist, sondern erst später angezeigt wird.

              1 Reply Last reply Reply Quote 0
              • N
                nevermind last edited by

                @arteck:

                javascript adapter installieren und klimper den code da ein `

                Hab ich leider noch nicht ganz verstanden. Mir fehlen da einfach noch paar Basics. Scripte im Javascript-Adapter einfügen habe ich hin bekommen aber wie "kommt" das Script dann in meine .vis-Oberfläche? D.h. es muss ja beim Aufruf meines Views mit geladen werden…

                Danke

                Jens

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  Hallo Jens,
                  @nevermind:

                  wie "kommt" das Script dann in meine .vis-Oberfläche? `
                  Hier: http://www.iobroker.net/?page_id=2754&l … Sidebar_15

                  Reiter Skripte, dann hier http://www.iobroker.net/?page_id=2754&lang=de#Skripte eintragen.

                  @nevermind:

                  es muss ja beim Aufruf meines Views mit geladen werden… `
                  und genau das passiert dann 😉

                  Gruß

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • N
                    nevermind last edited by

                    hmpf … ich weiß nicht wie ich es genauer beschreiben kann, Rainer. Genau so (Sidebar -> Skripte) funktioniert es eben nicht, sofern das View nicht das "Startview" ist.

                    setTimeout(function () {
                        $('.vis-widget').click(function () {
                           var audio = new Audio('http://download.iobroker.net/usedForVisDocumentationBell.mp3');
                           audio.play(); 
                        });
                    }, 2000);
                    

                    An diesem Beispielcode: Es macht nun in meinen "Startview" immer "Ping" wenn ich irgendwo draufklicke. Nun wechsel ich vom Startview in ein anderes View (z.B. von Erdgeschoss-Ansicht zu OG-Ansicht). Hier macht nun nichts mehr Ping. Auch dann nicht, wenn ich das Beispielskript im Skript-Reiter der Obergeschoss-Ansicht einfüge. Rufe ich die Obergeschoss-Ansicht direkt über den Browser auf und nicht aus dem anderen View, macht es auch hier Ping.

                    1 Reply Last reply Reply Quote 0
                    • L
                      Lumpenhund last edited by

                      Servus zusammen,

                      wurde dieses Problem bisher gelöst?

                      Habe genau das gleiche Problem. Das Skript direkt im Java Adapter habe ich bisher nicht mal zum laufen gebracht…

                      Gibts hier neue Erkenntnisse?

                      Grüße

                      Lumpe

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      817
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      2633
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo