Eigene JavaScript-Dateien einbinden

Begonnen von Thorsten Pferdekaemper, 21 Februar 2017, 10:48:13

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
für "mein" Modul HM485 gibt es eine eigene JavaScript-Datei <fhem>/www/pgm2/hm485.js. Diese wird durch FHEMWEB anscheinend automatisch eingebunden. Im Quelltext sieht das so aus:

<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb_sortable.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb_uzsu.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb_weekprofile.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/hm485.js?1487670015.30965"></script>
</head>

Jetzt habe ich dazu zwei Fragen:

1. Warum steht hinter "meiner" js-Datei diese längliche Zahl, nicht aber hinter den anderen? (Möglicherweise müsste ich als Modulentwickler das wissen, aber ich habe den Kram auch nur übernommen.)

2. Es ist etwas unschön, dass hm485.js in jede FHEMWEB-Seite eingebunden wird. HM485 wird zwar nicht automatisch mit FHEM ausgeliefert, aber das kann sich ja mal ändern. Die Datei hm485.js ist auch etwas gewachsen, da ich meine Konfigurationsdialoge komplett auf JavaScript umgestellt habe. Was ist denn der "FHEM-Weg", diese Datei nur dann einzubinden, wenn sie benötigt wird?

Danke&Gruß,
   Thorsten

FUIP

rudolfkoenig

Sollte das nicht der HM485 Autor beantworten? Ich habe von HM485 keine Spuren im SVN gefunden.

FHEMWEB laedt folgende JavaScripte:
- www/pgm2/fhemweb*.js
- die per JavaScripts Attribut spezifizierte
- Bei geladenen Module die per $data{FWEXT}{$k}{SCRIPT} spezifizierten

Die Zahl ist ein Zeitstempel, um Caching zu vermeiden. MW habe ich sowas fuer .js Dateien nicht verwendet.

Thorsten Pferdekaemper

Zitat von: rudolfkoenig am 21 Februar 2017, 11:00:09
Sollte das nicht der HM485 Autor beantworten?
Ich bin sozusagen der HM485-Autor.

Zitat
Ich habe von HM485 keine Spuren im SVN gefunden.
Es waren Dir zu viele Dateien, deshalb wird es per "update add..." ausgeliefert.

Zitat
FHEMWEB laedt folgende JavaScripte:
- www/pgm2/fhemweb*.js
- die per JavaScripts Attribut spezifizierte
- Bei geladenen Module die per $data{FWEXT}{$k}{SCRIPT} spezifizierten
Da muss ich doch nochmal in "meinem" Coding suchen. Sehr seltsam.
Jetzt mal zur Frage wie es sein sollte:
Die ersten zwei Möglichkeiten scheiden aus, da es ja nur geladen werden soll, wenn ein HM485-Device angezeigt wird. Würde das die letzte Möglichkeit so machen? ...oder werden die alle immer geladen, sobald es mal drinsteht? 


Zitat
Die Zahl ist ein Zeitstempel, um Caching zu vermeiden. MW habe ich sowas fuer .js Dateien nicht verwendet.
Ich habe das bei mir aber auch nicht gefunden. Nochmal suchen...

Danke&Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

So, jetzt habe ich nochmal gesucht und folgende Zeile gefunden:

$data{FWEXT}{test}{SCRIPT} = 'hm485.js?' . gettimeofday();

Naja...
Blöderweise bedeutet das, dass die hm485.js immer geladen wird, und zwar für jedes Modul. Jetzt meine Frage: Gibt es einen für FHEMWEB "empfohlenen" Weg, wie ich die Datei nur dann laden kann, wenn benötigt? Das "wenn benötigt" habe ich komplett unter Kontrolle.
Gruß,
   Thorsten
FUIP

rudolfkoenig


Thorsten Pferdekaemper

Zitat von: rudolfkoenig am 21 Februar 2017, 12:29:29
Definiere "wenn benoetigt".
Die Datei wird fast immer benötigt, wenn ein HM485-Device (also die Detailseite des Device) angezeigt wird. Es gibt die (theoretische) Möglichkeit, dass ein Device keine Konfiguration erlaubt, dann brauche ich die hm485.js auch nicht.
Das HM485-Modul hat eine FW_detailFn, die einen Bereich (<div>...</div>) einfügt, in dem dann per JavaScript "mein" Konfigurationsdialog abläuft. (Das ganze kann ich gerade nicht genauer zeigen, wenn es Dich interessiert, dann zeige ich heute Abend mal mehr.)
Ich könnte jetzt wahrscheinlich von der FW_detailFn aus auch das Einbinden der hm485.js erledigen, wenn es aber schon einen "FHEM-Weg" dafür gibt, dann würde ich den lieber nehmen.
Gruß,
   Thorsten
FUIP

rudolfkoenig

Dann mach das bitte in FW_detailFn.

Wenn es nicht sehr lang ist, kannst du JavaScript auch in<script></script> ausliefern, siehe at_fhemwebFn in 90_at.pm.

Thorsten Pferdekaemper

Zitat von: rudolfkoenig am 21 Februar 2017, 12:42:39
Dann mach das bitte in FW_detailFn.
Ok, das werde ich dann mal versuchen.

Zitat
Wenn es nicht sehr lang ist, kannst du JavaScript auch in<script></script> ausliefern, siehe at_fhemwebFn in 90_at.pm.
Das hatte ich mir schon angesehen. Bei mir kommt da aber ein bisschen mehr zusammen. Das wäre mir dann doch zu unhandlich. Ich werde es dann mal mit

<script src="<pfad>/hm485.js"></script>

...oder mit jQuery.getScript() versuchen.
Danke&Gruß,
   Thorsten
FUIP