Prüfen, ob Edge oder Crome als Browser verwendet wird

tklustig

Erfahrenes Mitglied
Hallo Leute,
folgender Code soll eigentlich letztlich nur prüfen, ob als Browser Chrome oder Edge verwendet wird. Genau diese beiden Browser werden allerdings nicht unterschieden.
Wie muss das folgende JS Script abgeändert werden, damit meine Intention funktioniert?

Javascript:
    var browsers = ["Firefox", "Chrome", "Safari", "Opera",
        "MSIE", "Trident", "Edge"];
    var userbrowser, useragent = navigator.userAgent;
    for (var i = 0; i < browsers.length; i++) {
        if (useragent.indexOf(browsers[i]) > -1) {
            userbrowser = browsers[i];
            break;
        }
    }
    switch (userbrowser) {
        case 'Chrome':
            userbrowser = 'Chrome';
            break;
        case 'Edge':
            userbrowser = 'Edge';
            break;
        default:
            userbrowser = 'Other';
    }
    alert('You are using ' + userbrowser + ' browser');
 
Habe das jetzt ganz einfach so geregelt:
Javascript:
    var isIE = /*@cc_on!@*/false || !!document.documentMode;
    var isEdge = !isIE && !!window.StyleMedia;
    if (isEdge)
        alert("Bestimmte PDF Darstellungen werden mit Microsoftbrowser nicht funktionieren. Verwenden Sie besser Chrome oder Firefox");

Dieser Thread hat sixh somit erledigt!
 
Edge sendet einen User Agent String, der auch Chrome und Safari enthält. Ergo musst du Edge im Array als erstes da lassen.

Browser Sniffing ist aber selten eine gute Idee.
 
Das hat nix mit Sniffing zu tun. In meiner aktuellen Applikation funktioniert die Druckoption einer Rechnung partout nicht mit Browsern aus dem Hause Microsoft. Mit allen anderen Browsern funktioniert das. Diesen Umstand muss ich dem User mitteilen. Natürlich wäre es mir lieber, folgender Code würde in allen Browsern seinen Dienst tun. Tut er aber leider nüscht. Hier der Code

PHP:
    public function actionPrint($id) {
        $data = Rechnung::findOne(['id' => $id])->rechnungPlain;
        $rechnungVon = 'Rechnung/Unterlagen von Makler ' . Rechnung::findOne(['id' => $id])->makler->username . ' an ';
        $geschlecht = Rechnung::findOne(['id' => $id])->kunde->geschlecht0->typus;
        $vorname = Rechnung::findOne(['id' => $id])->kunde->vorname;
        $nachname = Rechnung::findOne(['id' => $id])->kunde->nachname;
        $rechnungAn = $geschlecht . ' ' . $vorname . ' ' . $nachname;
        $rechnungTitle = $rechnungVon . ' ' . $rechnungAn;
        $pdf = new Pdf([
            'mode' => Pdf::MODE_CORE,
            'format' => Pdf::FORMAT_A4,
            'orientation' => Pdf::ORIENT_PORTRAIT,
            'destination' => Pdf::DEST_BROWSER,
            'content' => $data,
            'cssFile' => '@vendor/kartik-v/yii2-mpdf/src/assets/kv-mpdf-bootstrap.min.css',
            'cssInline' => '.kv-heading-1{font-size:18px}',
            'options' => ['title' => $rechnungTitle],
            'methods' => [
                'SetHeader' => $rechnungTitle,
                'SetFooter' => ['{PAGENO}'],
            ]
        ]);
        return $pdf->render(array($pdf->render(), 'target' => '_blank'));
    }
 
Zuletzt bearbeitet:
Natürlich wäre es mir lieber, folgender Code würde in allen Browsern seinen Dienst tun
Dein Code sieht nach PHP aus. Demnach tut er in keinem einzigen Browser seinen Dienst, sondern einzig und allein auf deinem Server ;)

Lese ich aus deinem vorletzten Beitrag richtig raus, dass der interne PDF-Betrachter in Microsoft Edge Rendering-/Layoutprobleme macht? Im Zweifel könntest du PDF.js zum browser-unabhängigen Rendering nutzen.
 
Nun, da ich ein Framework benutze(Yii2), klappt das sehr wohl mit der Anzeige auf den Clients, auch mit PHP Code, da der über Widgets letztlich JS Code ausführt. Andererseits kann ich da nicht so einfach andere Bibliotheken nutzen, sondern nur die, die bei mir eingebunden sind.
 
Zurück