• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Browser Check Div / browser-check JS Tipps

Elma

New member
Hi.

Ich habe ein kleines Javascript erstellt, mit dem ich prüfe, ob der Browser gewisse Mindeststandards erfüllt.

Es wird in einem DIV eingebunden, welches dann eine Fehlermeldung ausgibt, wenn die Mindeststandards nicht erfüllt sind.

HTML:
        <div id="browsercheck">
            <script src="browsercheck.js"></script>
            <p>
            This Website requires JavaScript. Please enable (activate) it in your browser settings.<br>
            Diese Website benoetigt JavaScript. Bitte aktivieren Sie es in Ihren Browsereinstellungen.<br>
            </p> 
        </div>

Wenn JS gar nicht aktviert ist, ist ein entsprechender Text zu sehen.
Wenn die Mindeststandards nicht erfüllt werden, soll die entsprechende Fehlermeldung ausgegeben werden.
Wenn alles Okay ist, wird das DIV mit display: none ausgeblendet.

Nun tritt folgendes Problem auf.
Wenn ich das browsercheck.js vor das <p> setze, kann ich die Fehlermeldung nicht ausgeben, weil das <P> noch nicht gerendert wurde.
Setze ich es nach dem <P> ein, flackert bei einem Reload im Browser ganz kurz der"Kein JS" Text auf.

Eine Lösung wäre, den Test und die Ausgabe des Ergebnisses auf 2 Scripte aufzuteilen, die dann jeweils davor und danach sitzen.
Dadurch steigt die Zahl der Requests durch den Browser aber an.

Könnte man das auch anders / Besser lösen?

LG
 
Noscript geht leider nicht zuverlässig, da z.B. bei uns in der Firma JS und Flash etc durch die Firewall schon gefiltert wird wenn die Domain nicht in der Whitelist ist.
Da nützt dann auch kein Noscript.

Deswegen bevorzuge ich einen "echten" Test. Und nebenbei wird in dem Script dann auch noch verschiedene andere Mindestvorraussetzungen geprüft.

Hab aber eine Möglichkeit gefunden, wie man es machen kann.
Ich muss an das html oder Body Element z.b die Klasse "browsercheck-bad" zuweisen und mit dem Nachfahrselektor arbeiten, um die Box anzuzeigen.
Wenn kein Problem auftritt, wird die Klasse "browsercheck-bad" entfernt bevor der HTML Parser das browsercheck-div erreicht.
Dann flackert es auch nicht.
 
Deswegen bevorzuge ich einen "echten" Test. Und nebenbei wird in dem Script dann auch noch verschiedene andere Mindestvorraussetzungen geprüft.

naja also clientseitig ist das auch kein "echter" test und nicht wirklich sinnvoll... es kann nun mal nicht zweifelsfrei festgestellt werden, ob js (vollständig) aktiviert ist.
 
Wo sonst außer am Client soll eine Javascript - Prüfung Sinn machen?
 
Wo sonst außer am Client soll eine Javascript - Prüfung Sinn machen?
ok bisschen anders formuliert: du kannst clientseitig nix "richtig" prüfen, und serverseitig geht das in dem fall gar nich -->
es kann nun mal nicht zweifelsfrei festgestellt werden, ob js (vollständig) aktiviert ist.

d.h. bevor man dutzende unnötige "tests" macht, um nutzer ohne js auszusperren sollte man lieber die webseite so bauen dass sie auch ohne js einigermaßen nutzbar ist --> https://de.wikipedia.org/wiki/Unobtrusive_JavaScript
 
Hi.
Naja, wenn ich Clientseitig ein Objekt mit Object.create() erzeugen kann, kann ich ja schon davon ausgehen, dass JS aktiviert ist und funktioniert.
Man könnte den Test nun auch noch ausweiten, und wichtige Kernfunktionen testen. Zum Beispiel ob Flexbox unterstützt wird. Und ob AJAX erfolgreich genutzt werden kann.
Ich wollte dem User aber auf jeden Fall eine Rückmeldung geben, wenn etwas nicht klappt.
Und es soll kein "Trümmerfeld" sichtbar sein, wenn eine Mindestvorraussetzung nicht erfüllt ist. (Browser zu alt, kein JS, etc)

Mit Browserweichen auf CSS Basis oder auf PHP Basis habe ich leider nicht den gewünschten Erfolg erzielt. Zu viel Aufwand und klappt trotzdem nicht wirklich gut wenn man sich beim Layout nicht einschränken will. Mit JS kann man das schon besser und einfacher angehen.

Ich denke mir das so: Die Seite läd erst mal im Simple Layout. Das ist dann so einfach gehalten, da hat man wenig Probleme das so hinzubekommen, dass egal welcher Browser, der Main Inhalt immer irgendwie lesbar bleibt. Ein Ein-Spalten-Layout ohne Schnickschnack damit die statischen Inhalte auf jeden Fall lesbar sind, geht immer irgendwie.
Alles Weitere, wie z.B. das "Responsive Flexbox Layout" oder die Boxen für die Ajax Inhalte soll dann per JS nachgeladen werden wenn die betreffenden Tests erfolgreich sind. Da muss ich dann nicht mehr so viel Rücksicht auf Inkompatibilitäten nehmen, weil da dann entweder alles oder nichts gilt.

LG
 
Hi.

Bin nach diversen Versuchen zu modernizr.js übergegangen.
Allerdings ohne die Klassen von modernizer an <HTML> einfügen zu lassen. Ich werte das nur per JS aus. Wenn der Browser die gewünschten Features kann, wird das große CSS über einen DOM Zugriff eingebunden.
Wenn JS deaktiviert ist oder der Browser "nicht gut genug" ist, wird nur basis.css eingebunden, welches fest im HTML eingetragen ist. basis.css ist relativ einfach gehalten (1-Spalten Layout was auch auf alten Browsern relativ unproblematisch ist, im Gegensatz zu einem Mehrspalten-Layout)
Und es verbirgt auch das Login-Feld, da im Spiel selber kaum Fallbacks eingebaut sind und man mit älteren Browsern als IE11 somit sowieso nicht spielen könnte.
Aber es reicht, um z.B. die Anleitung zu lesen.
 
Ich wollte nicht, dass man mit alten Browsern überhaupt noch einloggen kann, und dann einen unspielbaren "Trümmerhaufen" vorfindet.

Dann lieber eine schöne Fehlermeldung zeigen.


Achja: Wäre es besser, fehlenden JS Support durch das Noscript Element anzuzeigen, oder durch ein DIV, dessen Anzeige durch JS verhindert wird?

Mit dem noscript Tag hatte ich das Problem, dass in der Firma keine "Bitte JS Aktivieren" Meldung angezeigt wurde. Da dort JS im Browser zwar aktiviert ist, aber durch die Firewall herausgefiltert wird, wenn die Seite nicht auf der Whitelist steht.Deswegen hatte ich dann eine Lösung mit einem normalen DIV gebaut.
 
Wäre es besser, fehlenden JS Support durch das Noscript Element anzuzeigen, oder durch ein DIV, dessen Anzeige durch JS verhindert wird?
Da gibst du dir die antwort doch schon selbst:

Mit dem noscript Tag hatte ich das Problem, dass in der Firma keine "Bitte JS Aktivieren" Meldung angezeigt wurde. Da dort JS im Browser zwar aktiviert ist, aber durch die Firewall herausgefiltert wird.
noscript ist weniger zuverlaessig, m.e. aber viel eleganter
 
Ich wollte nicht, dass man mit alten Browsern überhaupt noch einloggen kann, und dann einen unspielbaren "Trümmerhaufen" vorfindet.

Dann lieber eine schöne Fehlermeldung zeigen.
Wenn es konkret um die alten IEs geht dann nutze doch einfach Conditional Comments und gebe einen statischen Upgrade-Hinweis aus.

Achja: Wäre es besser, fehlenden JS Support durch das Noscript Element anzuzeigen, oder durch ein DIV, dessen Anzeige durch JS verhindert wird?

Mit dem noscript Tag hatte ich das Problem, dass in der Firma keine "Bitte JS Aktivieren" Meldung angezeigt wurde. Da dort JS im Browser zwar aktiviert ist, aber durch die Firewall herausgefiltert wird, wenn die Seite nicht auf der Whitelist steht.Deswegen hatte ich dann eine Lösung mit einem normalen DIV gebaut.
Im Idealfall machst du das so: noscript with js. Falls die Firewall das script-Tag im HTML-Dokument nicht herausfiltern sollte, wirst du zusätzlich noch prüfen müssen, ob die scripts deiner Anwendung geladen werden konnten.

noscript ist weniger zuverlaessig
Nö, noscript tut genau was es soll. Wenn ein Browser aber gar keine Scripts erhält, weil eine externe Instanz (Firewall, Proxy, etc.) das Zeug einfach wegfiltert, kann doch noscript nichts dafür. Und JavaScript scheint auf den betroffenen Browsern trotzdem aktiviert zu sein :)
 
Zuletzt bearbeitet:
Nö, noscript tut genau was es soll. Wenn ein Browser aber gar keine Scripts erhält, weil eine externe Instanz (Firewall, Proxy, etc.) das Zeug einfach wegfiltert, kann doch noscript nichts dafür.
Das ist Haarspalterei. Natürlich "kann" noscript da "nichts dafür" aber das widerspricht nicht der tatsache, dass die erkennung mittels noscript nun mal nicht ausreichend zuverlaessig ist.
 
Das ist Haarspalterei. Natürlich "kann" noscript da "nichts dafür" aber das widerspricht nicht der tatsache, dass die erkennung mittels noscript nun mal nicht ausreichend zuverlaessig ist.
Doch. Denn noscript wird nur dann aktiviert, wenn JavaScript im Browser deaktiviert ist. Und das ist dort eben nicht der Fall.
 
das ist ja schoen und gut, ich habe auch nicht behauptet, noscript würde nicht der spezifikation entsprechen - aber wo widerspricht
wird nur dann aktiviert, wenn JavaScript im Browser deaktiviert ist. Und das ist dort eben nicht der Fall.
der tatsache, dass die erkennung mittels noscript nun mal nicht ausreichend zuverlaessig ist.
Deine Aussage ist etwas unpräzise. Für den konkreten Fall des TE reicht noscript nicht aus, korrekt. Aber dass noscript nicht ausreichend zuverlässig ist, stimmt eben nicht - denn es tut was es soll. Das will ich nur klarstellen.
 
Aber dass noscript nicht ausreichend zuverlässig ist, stimmt eben nicht - denn es tut was es soll.
wie gesagt, das bestreite ich auch nicht :D ich finde aber, etwas kann auch dann nicht ausreichend zuverlässig sein, wenn es tut, was es soll - z. b. navigator.cookieEnabled, da kann man auch nicht vollstens darauf vertrauen, obwohl es für sich genommen korrekt arbeitet.
aber lassen wir es dabei bewenden, ich kann ja deinen punkt voll nachvollziehen, und das ist jetzt nur noch sprachlicher diskurs.
 
wie gesagt, das bestreite ich auch nicht :D ich finde aber, etwas kann auch dann nicht ausreichend zuverlässig sein, wenn es tut, was es soll
Wenn du meine Frau wärst, würde ich diesen Satz tatsächlich akzeptieren. Für mich bedeutet "zuverlässig", dass man sich auf etwas "verlassen" kann. Und auf noscript kann man sich definitiv verlassen, wenn es darum geht Content auszugeben sofern JavaScript deaktiviert ist :) Es ist in diesem Fall lediglich nicht ausreichend. Mir geht es im Prinzip auch eher darum, dass die anderen Leser (die weder in deinen noch in meinen Kopf gucken können) plötzlich glauben noscript würde nicht zuverlässig funktionieren und somit fehlerhaft sein.

Aber gut, Schwamm drüber ;-)
 
Danke. Ich denke, ich bleibe bei der Lösung mit dem DIV, welches angezeigt wird, wenn mein Script es nicht zur Ausführung geschafft hat.
Warum auch immer. JS aus, Script geblockt oder fehlende grundlegende Features (wie z.B. kein let Support und deswegen Abbruch gleich am Anfang schon), das kommt dann alles aufs gleiche raus.
Ich muss dann nur die Meldung im DIV entsprechend formulieren und zu einer Hinweisseite verlinken.
 
Zurück
Oben