Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4656

Re: Browsereinstellungen abfragen: Die Lösung

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.javascript
Subject Re: Browsereinstellungen abfragen: Die Lösung
Date 2015-07-29 23:49 +0200
Organization PointedEars Software (PES)
Message-ID <1977000.ilC4Ou9lg9@PointedEars.de> (permalink)
References <201507282031.a15627@b.maus.de> <201507290149.a16208@b.maus.de>

Show all headers | View raw


Axel Berger wrote:

> Noch einmal vielen Dank an alle Helfer. Diese Lösung funktioniert jetzt:

Wie willst ausgerechnet Du das beurteilen können?  „Funktioniert“ heisst im 
Web und vor allem bei einer Skriptsprache _nicht_ „funktioniert *heute* in 
*meinem/-n* *Browser(n)*“.
 
> http://www.hermann-riemann.de/u/fremd.b.js
> function fett() {
> var btag, utag, farbe;

Nicht-englische Bezeichner sind pfui[tm].

> btag = document.getElementById('center').getElementsByTagName("b");
> utag = document.getElementById('center').getElementsByTagName("u");
> // alert (btag);

// window.alert(btag);

> if (window.getComputedStyle)

Wie bereits geschrieben: Es muss „document.defaultView.getComputedStyle“ 
heissen, wenn man kompatibel bleiben will.  Etwas ältere Safari-Versionen 
zum Beispiel unterstützen nur das und weder window.getComputedStyle() …

>   farbe = window.getComputedStyle(btag[0],null).backgroundColor;
> else if (btag[0].currentStyle)

… noch diesen, _nicht_ 100 % äquivalenten, Fallback für IE < 9 und IE 9
im IE < 9 Document Mode.

Die nötigen Tests zur Laufzeit fehlen hier oder sind unzureichend.

- AISB: Methoden von Host-Objekten, wie “getComputedStyle”, dürfen
  nicht und sollten nicht nur einem einfachen typkonvertierenden Test
  unterzogen werden, sondern müssen auf voraussichtliche Funktionalität
  getestet werden.  Siehe jsx.object.isHostMethod().

- der Feature-Test für document.getElementById(…) fe lt;

- der Feature-Test für Element::getElementsByTagName(…) fe lt;

- der Test für btab[0] fe lt

>   farbe = btag[0].currentStyle.backgroundColor;

In einem allgemeinen Script muss man hier auch mindestens Hintergrundbilder 
berücksichtigen.

> // alert (farbe);

// window.alert(farbe);

Im 21. Jahrhundert kennt man ausserdem „console.log(…)“ usw.:

<http://devtoolsecrets.com/>

> if (farbe != 'transparent') {

In der Regel wird die Farbe von getComputedStyle() in "rgb(…)"- oder 
"rgba(…)"-Notation zurückgegeben; der Rückgabewert für Transparenz ist dann 
in der Regel "rgba(0, 0, 0, 0)", wobei die Whitespaces optional sind.  Wenn 
man es kompatibel abfangen will, muss man diesen Teil der CSS-Spezifikation 
parsen [es könnte nämlich auch "rgba(0%, 0%, 0%, 0.0)" sein].

Und die transparente Hintergrundfarbe eines Kind-Elements sagt noch nichts 
über seine Deckkraft (opacity) und die Transparenz und Deckkraft seiner 
Vorfahren-Elemente aus…

>   for (var di=0;di<btag.length;di++) {

Besser:

  for (var di = 0, len = btag.length; di < len; ++di) {

- Eigenschaften, deren Wert sich voraussichtlich nicht ändert, müssen nicht
  bei jedem Schleifendurchlauf abgefragt werden.  Dies dann nicht zu tun,
  erhöht *erheblich* die Effizienz von Programmen.

- Pre-Inkrement ist tendenziell effizienter als Post-Inkrement, wenn man
  den alten Wert nicht braucht, da dieser dann nicht gespeichert werden 
  muss.

Spielt ausserdem die Reihenfolge keine Rolle, kann effizienter rückwärts 
iteriert werden:

  for (var di = btag.length; di--;) {

“di” ist ein ungewöhnlicher Bezeichner für einen Zähler; entweder sollte aus 
dem Bezeichner erkennbar sein, was hier “d” sein soll, oder er sollte 
schlicht “i” sein (für tiefer verschachtelte Schleifen dann, “j”, “k”, usw.)

>     btag[di].style.fontStyle = 'normal';
>     btag[di].style.fontWeight = 'normal';
>     };
>   for (var di=0;di<utag.length;di++) {

Siehe oben.

>     utag[di].style.fontStyle = 'normal';
>     utag[di].style.fontWeight = 'normal';
>     utag[di].style.textDecoration = 'none';

Wenn auf ein Objekt in einer Liste oder Collection mehrfach zugegriffen 
wird, ist es effizienter, die Referenz in einer Variablen zu speichern.
Es ergibt sich automatisch, dass der Bezeichner für die Listen-/Collection-
Referenz im Plural stehen sollte:

   var utag = utags[di];
   utag.style.fontStyle = 'normal';
   utag.style.fontWeight = 'normal';
   utag.style.textDecoration = 'none';

Inzwischen (Opera < 9 ist tot) dürfte es sogar vertretbar sein,

   var utag_style = utags[di].style;
   utag_style.fontStyle = 'normal';
   utag_style.fontWeight = 'normal';
   utag_style.textDecoration = 'none';

zu schreiben.  Allerdings kann man sich überlegen, dass man dies immer 
wieder brauchen wird, und eine Methode schreiben, wie sie einige 
Bibliotheken mitbringen und wie ich es gestern auch getan habe:

   jsx.dom.setStyle(utags[di], {
     "font-style": "normal",
     "font-weight": "normal",
     "text-decoration": "none"
   });  

(Schamlos geklaut von jQuery’s .css(…), und verbessert :))

>     }
>   }
> }
> 
> Thomas, Du findest hier bestimmt viel verbesserungsfähiges. Javascript
> (das es außer im Namen dieser Gruppe nicht gibt)

Im Namen dieser Gruppe gibt es kein „Javascript“.  Dass darin “javascript” 
steht, hat allein Usenet-technische Gründe: Die Namen *aller* Newsgroups 
werden mit kleinen Buchstaben geschrieben.  Relevant sind die Tagline, die 
Charta und die *d*cljs-FAQ, und auch dort wirst Du kein „Javascript“ finden; 
wohl aber „JavaScript“.  (In der cljs-FAQ gibt es “javascript” nur aus 
[maintainer-]hyster^Whistorischen Gründen; hoffentlich aber nicht mehr 
lange.)

Auf die Gross-/Klein-Schreibung kommt es aber nicht so sehr an wie auf das, 
was damit fälschlicherweise ausgesagt wird: Es gäbe nur eine, in allen 
Umgebungen gleiche, Skriptsprache dieses Namens.

Hausaufgabe: <http://PointedEars.de/es-matrix> ff. sinnentnehmend lesen.

(Aber man kann sich den Mund fusselig reden, irgendein Idiot wird immer 
weiter auf der Gross-/Klein-Schreibung herumreiten, anstatt das eigene, 
tieferliegende Miss- und Unverständnis zu erkennen.)

> ist eine Sprache, die ich kaum bis gar nicht beherrsche.

Keine Ahnung auf einem bestimmten Gebiet scheint bei vielen die ideale 
Voraussetzung zu sein, komplexe Probleme auf genau diesem Gebiet lösen und 
Problemlösungen anderer dazu verstehen zu können. [psf 4.3]
 
-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

Back to de.comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-29 01:49 +0200
  Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-29 23:49 +0200
    Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-30 13:28 +0200
      Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 16:45 +0200
        Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-30 17:28 +0200
          Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 17:47 +0200
        Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 20:22 +0200
      Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-31 11:10 +0200
        Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-31 16:36 +0200
          Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-31 17:01 +0200
            Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-08-03 14:38 +0200
    Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 11:21 +0200
      Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 22:19 +0200
    Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 12:01 +0200
      Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 22:23 +0200

csiph-web